<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Karl Katzke &#187; symfony</title>
	<atom:link href="http://www.karlkatzke.com/categories/php/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.karlkatzke.com</link>
	<description>Geek of the Week</description>
	<lastBuildDate>Fri, 16 Dec 2011 19:54:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>New Symfony Community Manager</title>
		<link>http://www.karlkatzke.com/new-symfony-community-manager/</link>
		<comments>http://www.karlkatzke.com/new-symfony-community-manager/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 15:53:47 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[community]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=286</guid>
		<description><![CDATA[Congratulations to Kris Wallsmith on his appointment as the new Symfony Community Manager. He made his first post to the community blog today and has access to the core. Kris is in my mind one of the top ten PHP developers in the world, as well as an excellent husband, father, indoor soccer player, and [...]]]></description>
			<content:encoded><![CDATA[<p>Congratulations to <a href="http://twitter.com/kriswallsmith">Kris Wallsmith</a> on his appointment as the new Symfony Community Manager. He made his <a href="http://www.symfony-project.org/blog/2008/10/22/plugin-developers-day">first post to the community blog</a> today and has access to the core. Kris is in my mind one of the top ten PHP developers in the world, as well as an excellent husband, father, indoor soccer player, and all around great guy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/new-symfony-community-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Well, maybe.</title>
		<link>http://www.karlkatzke.com/well-maybe/</link>
		<comments>http://www.karlkatzke.com/well-maybe/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 12:10:14 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[punditry]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[zend_framework]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=171</guid>
		<description><![CDATA[First, read this: The Answer is No @ The Big Contrarian. In response: At least part of the problem is that we STILL haven&#8217;t defined the question. Is it that we develop a web application to solve problems in the most efficient and graceful way? Or is it that we develop a web application in [...]]]></description>
			<content:encoded><![CDATA[<p>First, read this: <a href="http://www.bigcontrarian.com/2008/07/11/the-answer-is-no/">The Answer is No @ The Big Contrarian</a>. </p>
<p>In response: At least part of the problem is that we STILL haven&#8217;t defined the question. Is it that we develop a web application to solve problems in the most <i>efficient</i> and <i>graceful</i> way? Or is it that we develop a web application in the most <i>maintainable</i> and <i>understandable</i> way?</p>
<p>To extend Jack&#8217;s metaphor of hammers and nails, the former would involve using a different hammer every time we need to drive a hammer into different wood. But you could quickly build up an environment where you had many different nails driven into boards at different depths and angles due to the blows of so many hammers. If you&#8217;ve driven the nail too deep for the wood, you may not be able to get it out at some point in the future without destroying the wood completely &#8212; aka one of those oft-talked-about failed development projects. </p>
<p>The discussion of how to develop web applications and what technology to use isn&#8217;t just a <b>computer science</b> decision, it&#8217;s a <b>business decision</b>. As someone who approaches computer problems from a utility and maintainability perspective, I want three things from a development tool. First, I want it to set (but not force) a style so that all programmers can code in a similar fashion, and programmers who are new to the project can walk in and get a feel for things within a few minutes. Second, I want it to be maintained and maintainable into the future as the language and development methods change. Third, I want it to be based on a stable technology that scales well. These are all utility things, considered at a much more abstract level than the computer science problems that Jack talks about. </p>
<p>If programmers didn&#8217;t search for new tools, the web would still look like it did in 1995, and we&#8217;d all still be developing CGI applications in C. Be thankful that the world moves on and that there are people and companies willing to develop and pursue new ways of doing things. The dogmatic approach some developers take towards their favorite technology isn&#8217;t bad, per say. It&#8217;s just part of the darwinian selection of the platforms and technologies that will move on. And in some cases, the programmers who won&#8217;t, ground beneath the ceaseless ever-rolling wheels of progress. </p>
<p>It&#8217;s fine to allow people to search for new tools and to be evangelists of their favorite tools and processes. <b>On their own time.</b> When they come to work at a job (be it consulting or other), someone needs to be laying down guidelines of how to do a project, and someone needs to enforce that all projects within one cone of perception use the same technologies, or use technologies that will be compatible in the future. </p>
<p><i>Standardization is the only way to maintain a high level of support</i>. Corporate development jobs regularly fail because someone had to do it their way. (I&#8217;m guilty of this too, but I&#8217;ve learned my lesson.) It&#8217;s the responsibility of the lead programmers to make sure that this doesn&#8217;t happen. Even if Zend Framework or Symfony or Ruby on Rails or some other technology is the most elegant and fastest way to solve a problem, don&#8217;t do it unless that&#8217;s what your group has standardized on, supports, and knows. If you&#8217;re a PHP shop, don&#8217;t write a webapp in Python. If you&#8217;re a MySQL shop, don&#8217;t use Postgres for this one project to &#8220;try it out.&#8221; Don&#8217;t. Just don&#8217;t. Pick one thing that&#8217;s good at many areas and just use it. </p>
<p>That isn&#8217;t to say that you shouldn&#8217;t improve your chosen one. <a href="http://phpdoctrine.org">Doctrine</a> exists because some developers wanted an ActiveRecord implementation in PHP that was as easy to use as Rails&#8217; is. So they wrote one. Symfony came from nearly the same place. Zend Framework&#8217;s rapidly arriving ajax integration is a direct outgrowth of what Symfony did with theirs. Just keep in mind that it&#8217;s not features from the programmer&#8217;s point of view that matter, it&#8217;s features from the point of view of the downstream developers that will support the application in the future and the systems administrators who have to maintain the platform that you&#8217;re on. If you keep it simple and just pick one for your particular shop, they can keep it simple too. And simple means stable. Stable, maintainable, and understandable means happy users, and are considered features by your users. </p>
<p>Make sure you deliver those features, or your project too <i>will</i> fail. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/well-maybe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webby Awards</title>
		<link>http://www.karlkatzke.com/webby-awards/</link>
		<comments>http://www.karlkatzke.com/webby-awards/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 21:46:52 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[meta]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=107</guid>
		<description><![CDATA[One of the websites I&#8217;ve done consulting work on, BookGlutton, has been nominated for a Webby Award. Congratulations to Travis and Aaron! The majority of the site was developed using Symfony, XMPP, and the blog is WordPress. I helped write a bunch of the user account management code, including AJAX.]]></description>
			<content:encoded><![CDATA[<p>One of the websites I&#8217;ve done consulting work on, <a href="http://www.bookglutton.com/" target="_blank">BookGlutton</a>, has been nominated for a Webby Award. Congratulations to Travis and Aaron!</p>
<p>The majority of the site was developed using <a href="http://www.symfony-project.org" target="_blank">Symfony</a>, XMPP, and the blog is WordPress. I helped write a bunch of the user account management code, including AJAX.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/webby-awards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Developers: Vim: CTags Framework Tab-Complete, Productivity Tips</title>
		<link>http://www.karlkatzke.com/php-developers-vim-ctags-framework-tab-complete-productivity-tips/</link>
		<comments>http://www.karlkatzke.com/php-developers-vim-ctags-framework-tab-complete-productivity-tips/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 01:18:42 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/php-developers-vim-ctags-framework-tab-complete-productivity-tips/</guid>
		<description><![CDATA[If you use vim and develop in PHP, you need these tips. If you&#8217;re on a Mac like I am but prefer command-line vim in a terminal window, you can download an updated version of VIM and then just symlink /usr/bin/vim to the bundle in the /Applications directory, and it&#8217;ll run as command line. Matthew [...]]]></description>
			<content:encoded><![CDATA[<p>If you use vim and develop in PHP, you need these tips.</p>
<p>If you&#8217;re on a Mac like I am but prefer command-line vim in a terminal window, you can download an updated version of VIM and then just symlink /usr/bin/vim to the bundle in the /Applications directory, and it&#8217;ll run as command line.</p>
<p>Matthew Weier O&#8217;Phinney on:</p>
<ul>
<li><a href="http://weierophinney.net/matthew/archives/164-Vim-Productivity-Tips-for-PHP-Developers.html">Vim Productivity tips for PHP Developers</a></li>
<li><a href="http://weierophinney.net/matthew/archives/134-exuberant-ctags-with-PHP-in-Vim.html">exuberant ctags with PHP in Vim</a></li>
</ul>
<p>Be sure to read the comments as well&#8230; there&#8217;s additional libraries and plugins to check out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/php-developers-vim-ctags-framework-tab-complete-productivity-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony and MAMP 1.7</title>
		<link>http://www.karlkatzke.com/symfony-and-mamp-17/</link>
		<comments>http://www.karlkatzke.com/symfony-and-mamp-17/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 19:47:03 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/symfony-and-mamp-17/</guid>
		<description><![CDATA[Getting this error? dyld: NSLinkModule() error dyld: Library not loaded: /Users/severin/Dev/Projects/MAMP_1.7_src/lib/libltdl.3.dylib Referenced from: /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/mcrypt.so Reason: image not found Trace/BPT trap You need to either execute this: export DYLD_LIBRARY_PATH=/Applications/MAMP/Library/lib:${DYLD_LIBRARY_PATH} in your shell window before running a PHP script from the command line (but be warned that this may break lots of other software you use from [...]]]></description>
			<content:encoded><![CDATA[<p>Getting this error?</p>
<blockquote><p>dyld: NSLinkModule() error<br />
dyld: Library not loaded: /Users/severin/Dev/Projects/MAMP_1.7_src/lib/libltdl.3.dylib<br />
  Referenced from: /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/mcrypt.so<br />
  Reason: image not found<br />
Trace/BPT trap</p></blockquote>
<p><span id="more-55"></span></p>
<p>You need to either execute this: <code>export DYLD_LIBRARY_PATH=/Applications/MAMP/Library/lib:${DYLD_LIBRARY_PATH}</code> in your shell window before running a PHP script from the command line (but be warned that this may break lots of other software you use from the command line, like vim) or you need to wrap <code>/Applications/MAMP/bin/php5/bin/pear</code> and <code>/Applications/MAMP/bin/php5/bin/symfony</code> in something that looks like this:</p>
<pre>#!/bin/bash
export DYLD_LIBRARY_PATH=/Applications/MAMP/Library/lib:${DYLD_LIBRARY_PATH}
/Applications/MAMP/bin/php5/bin/pear_bin
export DYLD_LIBRARY_PATH='';</pre>
<hr />
<h4>Related:</h4>
<div align="center">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" id="Player_6c954b87-8195-420b-af95-634fe0980d57"  WIDTH="400px" HEIGHT="150px"> <PARAM NAME="movie" VALUE="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=GetDisplayTemplate"><PARAM NAME="quality" VALUE="high"><PARAM NAME="bgcolor" VALUE="#FFFFFF"><PARAM NAME="allowscriptaccess" VALUE="always"><embed src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=GetDisplayTemplate" id="Player_6c954b87-8195-420b-af95-634fe0980d57" quality="high" bgcolor="#ffffff" name="Player_6c954b87-8195-420b-af95-634fe0980d57" allowscriptaccess="always"  type="application/x-shockwave-flash" align="middle" height="150px" width="400px"/> </OBJECT> <NOSCRIPT><A HREF="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=NoScript">Amazon.com Widgets</A></NOSCRIPT></p>
<div align="center">
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/symfony-and-mamp-17/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP: Symfony vs. Zend</title>
		<link>http://www.karlkatzke.com/php-symfony-vs-zend/</link>
		<comments>http://www.karlkatzke.com/php-symfony-vs-zend/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 23:18:12 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/php-symfony-vs-zend/</guid>
		<description><![CDATA[This article was published on 27 November 2007. It references a release candidate version of Zend Framework, version 1.0 of Symfony, a preview version of Doctrine, and a version of Propel that had issues with it&#8217;s dependency on Creole. It is severely out of date and has not been updated. The Symfony and Zend frameworks [...]]]></description>
			<content:encoded><![CDATA[<p style="color: red">This article was published on 27 November 2007. It references a release candidate version of Zend Framework, version 1.0 of Symfony, a preview version of Doctrine, and a version of Propel that had issues with it&#8217;s dependency on Creole. It is severely out of date and has not been updated.</p>
<p>The <a href="http://www.symfony-project.org">Symfony</a> and <a href="http://framework.zend.com">Zend frameworks</a> are so amazingly different that they almost don&#8217;t deserve to share the title &#8220;framework.&#8221;</p>
<p>Like the .Net Framework, Zend is a bucket of functions that, together, provide advanced interfaces to the most complex of tasks that web developers need to write regularly. They then leave the developer to work up a quick interface to the application, which they enable with their views structure. Zend&#8217;s major strength and weakness is that there isn&#8217;t one particular way to do things and that you can pick and choose which libraries you want to use.</p>
<p>Both frameworks are PHP5-native frameworks and won&#8217;t function in PHP4. Both are heavily object-oriented and make use of inheritance that&#8217;s only offered in PHP>5. Both use the front controller model.</p>
<p>The similarities end there.</p>
<p>Zend uses very little code generation and configuration is all in the front controller; Symfony has a great deal of code generation and a huge amount of configuration overhead. Zend is flexible about it&#8217;s directory hierarchy and allows you to heavily customize your directories to use global code libraries; Symfony has a required directory structure that is created when you use the command line tool to create modules. Zend doesn&#8217;t require command-line creation of modules.</p>
<p>After the jump, I&#8217;ll focus on a few areas where there&#8217;s some specific differences.<span id="more-53"></span></p>
<h3>Getting Started</h3>
<p>Symfony has a lot of &#8216;buzz&#8217; and user support, and there are excellent guides from both the authors and the communities to get users started on the learning curve. Zend doesn&#8217;t have as much, and the documentation is really directed at more experienced developers who are old hands with the more complex aspects of object-orientation.
<div id="rightbox" style="width:340;float:right;font-size: 10px;margin-left: 10px; padding: 3px  ; border: 1px dotted black; background-color: #fefefe"><b>Learn the Zend Framework:</b><br /><a href="http://www.karlkatzke.com/your-first-zend-framework-application-day-four/" title="View post Your First Zend Framework Application: Day Four">Your First Zend Framework Application: Day Four</a><br />
<a href="http://www.karlkatzke.com/your-first-zend-framework-application-day-thre/" title="View post Your First Zend Framework Application: Day Three">Your First Zend Framework Application: Day Three</a><br />
<a href="http://www.karlkatzke.com/your-first-zend-framework-application-day-two/" title="View post Your First Zend Framework Application: Day Two">Your First Zend Framework Application: Day Two</a><br />
<a href="http://www.karlkatzke.com/your-first-zend-framework-application-day-one/" title="View post Your First Zend Framework Application: Day One">Your First Zend Framework Application: Day One</a>
</div>
<h3>Unit Testing</h3>
<p>Symfony provides command-line tasks for unit testing and automatically generates a default (empty) testing object for you when you create a module.</p>
<p>Zend doesn&#8217;t have integrated support for unit testing, but all components that go into the framework require unit tests.</p>
<h3>Templating</h3>
<p>Zend&#8217;s templating is immature and doesn&#8217;t allow easy nesting without a well-documented hack or two, but will in the next release&#8230; or &#8216;Soon &#8482;&#8217;.</p>
<p>Symfony&#8217;s templating is extremely mature and uses caching extensively to rapidly deliver content to users. You can plug components and entire other modules into slots in your symfony templates, and you can customize the templates as much as you want through the use of layout scripts.</p>
<h3>Plugins</h3>
<p>Symfony has an extensive plugin and extension community in it&#8217;s community wiki. Zend, as yet, does not. It&#8217;s interesting to note that you can pull in the Zend framework&#8217;s functionality with Symfony by using the Zend Framework plugin for Symfony.</p>
<h3>Database Modules</h3>
<p>Zend uses the ActiveRecord model for databases. Symfony allows the user to plug in whatever database manager they want, <i>including Zend_Db</i>.</p>
<p>My issues with Symfony&#8217;s two current frontrunning database plugins (propel and doctrine) include the extensive bugs in both (Propel&#8217;s issues depend greatly on the lag in changing from Creole to DBO and also the stupidly complex criteron objects, and Doctrine&#8217;s as of yet an immature project that recently saw it&#8217;s first 1.0 release.) and the code generation / configuration overhead that you end up with when you&#8217;re creating hundreds of tables and managing changes to those tables. It gets to be a headache once you get past twenty or thirty tables. Zend&#8217;s active record implementation is much easier because all you need to do is direct an object at the item.</p>
<h3>Conclusion</h3>
<p>By far, Symfony is more complete, mature &#8230; but it can be overbearing when all you want to do is develop an application. It&#8217;s certainly more feature complete and allows you to be a better developer in a group. It&#8217;s the ideal framework to work with when you are working with a group of developers because everyone knows where to find everything. I love certain features like the Ajax integration, but I hate other things like the code generation and configuration overhead of (and the tendency towards serious bugs in) the Propel and Doctrine database plugins. Symfony 1.1 should be very nice and I&#8217;m eagerly awaiting it.</p>
<p>My personal preference though is for the Zend framework. Why? It&#8217;s more in line with the original goal of PHP &#8212; create a loose structure that&#8217;s easy for people to get into and develop in, and where you aren&#8217;t required to learn a large number of arcane commands and structures unless you set them up. The front controller setup for Zend isn&#8217;t very well explained, but it&#8217;s absurdly simple once you get into developing modules and functionality. I like the flatter file system. I like the choices I have in working with the views. I think the Zend Framework is easier to train people on and it&#8217;s easier to split roles into DBA and Coder roles due to ActiveRecord, but since you have more flexibility in how you set up your application you can&#8217;t necessarily bring in a developer that knows Zend and have them find their way around immediately.</p>
<p>There&#8217;s tradeoffs to each, so select which one is better for your purposes. It&#8217;s great that we&#8217;ve got such a wide selection of tools!</p>
<hr />
<h4>Related:</h4>
<div align="center">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" id="Player_6c954b87-8195-420b-af95-634fe0980d57"  WIDTH="400px" HEIGHT="150px"> <PARAM NAME="movie" VALUE="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=GetDisplayTemplate"><PARAM NAME="quality" VALUE="high"><PARAM NAME="bgcolor" VALUE="#FFFFFF"><PARAM NAME="allowscriptaccess" VALUE="always"><embed src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=GetDisplayTemplate" id="Player_6c954b87-8195-420b-af95-634fe0980d57" quality="high" bgcolor="#ffffff" name="Player_6c954b87-8195-420b-af95-634fe0980d57" allowscriptaccess="always"  type="application/x-shockwave-flash" align="middle" height="150px" width="400px"/> </OBJECT> <NOSCRIPT><A HREF="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F6c954b87-8195-420b-af95-634fe0980d57&#038;Operation=NoScript">Amazon.com Widgets</A></NOSCRIPT></p>
<div align="center">
<p style="color: red">This article was published on 27 November 2007. It references a release candidate version of Zend Framework, version 1.0 of Symfony, a preview version of Doctrine, and a version of Propel that had issues with it&#8217;s dependency on Creole. It is severely out of date and has not been updated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/php-symfony-vs-zend/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Mood: Jaded</title>
		<link>http://www.karlkatzke.com/mood-jaded/</link>
		<comments>http://www.karlkatzke.com/mood-jaded/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 20:16:55 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[punditry]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/mood-jaded/</guid>
		<description><![CDATA[Is there a framework that is uncomplicated, easy to get started in, will let you build applications out quickly with a minimum of hassle, and will let you integrate non-standard behaviours and &#8216;best practices&#8217; that you feel are important? Frameworks are great because other programmers can walk into the project and see exactly what the [...]]]></description>
			<content:encoded><![CDATA[<p>Is there a framework that is uncomplicated, easy to get started in, will let you build applications out quickly with a minimum of hassle, and will let you integrate non-standard behaviours and &#8216;best practices&#8217; that you feel are important?</p>
<p>Frameworks are great because other programmers can walk into the project and see exactly what the status of things is and how it should all work&#8230; and then start contributing almost immediately.</p>
<p>Frameworks can be bad when it takes a degree in computer science to figure out how to manipulate the thing into doing what you want because the behaviour you&#8217;re looking for was extended five layers back from some obscure object in a subdirrectory. PHP doesn&#8217;t have the IDE tools to handle that like Java and .Net do.</p>
<ul>
<li>Symfony &#8211; Learning curve like a backwards ski jump. Crippled by poor integration with two bad MVC systems &#8212; Propel&#8217;s crufty and backasswards and needs to drop down to Creole for m2m relationships&#8230; and don&#8217;t get me started on Criterions. Doctrine&#8217;s just incomplete and the integration isn&#8217;t going as well as planned because of the extensive refactoring. Requires too much code generation. Takes mucking around in configuration files for a month before you lay down any PHP code.</li>
<li>Zend Framework &#8211; One step better, but it&#8217;s so disjointed until you get to the Zend_Controller interface. You essentially need to extend the core libraries and load your versions instead of the core. Each piece is nice by itself, but I wouldn&#8217;t call the current release 1.0 because it&#8217;s still disjointed. On top of that, you can&#8217;t do multi-layer templates without integrating a separate template system like Smarty or re-writing the View sytem. There&#8217;s proposals in the works for it, but come on &#8212; this is a basic templating feature, and you took us back to the bad old days of &#8220;require header.php; echo $content; require footer.php;&#8221;? I&#8217;d expect something a little more modern out of Zend.</li>
<li>Cake &#8211; Still supports PHP4, so it&#8217;s OO is backwards.</li>
<li>CodeIgniter &#8211; See Cake.</li>
</ul>
<p>I want a framework that handles the configuration for me &#8212; it sets up a file structure with basic naming conventions, it provides decent templating functionality, it looks in the databases to find a model (and doesn&#8217;t have stupid one-database-per-app requirements) and inherits from that, and it provides configuration functionality that makes sense instead of endless arcane ini, yml and xml files.</p>
<p>Symfony almost gets it right, but it&#8217;s too complex and setting up a model and generating the code is a pain in the arse. Zend almost gets it right, but you still spend a week extending functionality and configuring things before you can build your application.</p>
<p>I just want to get in and start coding, and have the framework handle the rest for me instead of configuring, coddling, debugging and tweaking the framework&#8230; and then someday getting around to coding.</p>
<p>And while I&#8217;m dreaming, I&#8217;d like a pony.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/mood-jaded/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HowTo: Implement sfGuard</title>
		<link>http://www.karlkatzke.com/howto-implement-sfguard/</link>
		<comments>http://www.karlkatzke.com/howto-implement-sfguard/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 02:59:49 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/2007/09/08/howto-implement-sfguard/</guid>
		<description><![CDATA[sfGuard is a Symfony plugin that implements a user management and login system for an application. It supports both groups and individual users&#8230; and it saves you from having to &#8216;roll your own&#8217; user administration system. I&#8217;m going to walk you through the basic installation. The steps I take are all taken from the Wiki [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://trac.symfony-project.com/trac/wiki/sfGuardPlugin">sfGuard</a> is a Symfony plugin that implements a user management and login system for an application. It supports both groups and individual users&#8230; and it saves you from having to &#8216;roll your own&#8217; user administration system. I&#8217;m going to walk you through the basic installation. The steps I take are all taken from the Wiki page, but I&#8217;ll expound a little bit more about styling and creating a custom registration process.</p>
<p>Authentication and security are <i>important</i> for any application greater than a mere toy. It&#8217;s much better practice to implement something that&#8217;s standardized and depend on the security of lots of eyes and a decent user-base as opposed to depending on the obscurity of your own code to secure your app. I highly recommend using sfGuard.</p>
<p>First, the usual installation steps &#8212; in your project root directory, use
<pre>$ symfony plugin-install http://plugins.symfony-project.com/sfGuardPlugin
$     symfony propel-build-all
$     symfony propel-load-data (application name)</pre>
<p>The last one is actually important, even if you don&#8217;t already have fixtures &#8212; you need to load the admin user so that you can log into your application and access these new features that you&#8217;re automagically adding. More below the jump.<span id="more-28"></span></p>
<p>In $app/config/<b>settings.yml</b>, you&#8217;re going to want to configure the proper plugin modules. For your frontend, you&#8217;re going to want to configure the Auth module and the RememberMe filter.</p>
<p>$frontend_app/config/settings.yml:</p>
<pre>
all:
  .settings:
    enabled_modules: [default, sfGuardAuth]
</pre>
<p>$frontend_app/config/filters.yml:</p>
<pre>
security: ~
  class: sfGuardBasicSecurityFilter
</pre>
<p>Now, we&#8217;re going to implement the same for the backend, but adding in the administration modules. I added the sfGuardAuth to the backend; the main tutorial intends for you to use the frontend module&#8217;s authentication process to authenticate to the backend, but this never made sense to me. In the application I&#8217;m working on, I actually have <i>three</i> applications that are all administered at different levels; the frontend is for users, the mid level one is for day to day administration, and there&#8217;s a backend for setup and administering very base details of the application itself. Since most people aren&#8217;t quite as crazy as I am, I&#8217;m just doing frontend and backend for the example.</p>
<p>$backend_app/config/settings.yml:</p>
<pre>
all:
  .settings:
    enabled_modules: [default, sfGuardAuth, sfGuardUser, sfGuardGroup, sfGuardPermission]
</pre>
<p>$backend_app/config/filters.yml:</p>
<pre>
security: ~
  class: sfGuardBasicSecurityFilter
</pre>
<p>Now let&#8217;s make the changes necessary to redirect users to the sfGuard pages instead of your login pages.</p>
<p>In $frontend_app/config/settings.yml:</p>
<pre>
.all:
  .actions:
    login_module:           sfGuardAuth
    login_action:           signin

    secure_module:          sfGuardAuth
    secure_action:          secure
</pre>
<p>We also need to change the parent class in myUser.class.php. There&#8217;s functionality that the User class needs to be able to talk to the database.</p>
<p>$frontend_app/lib/myUser.class.php:</p>
<pre>
class myUser extends sfGuardSecurityUser
{
}
</pre>
<p><del>Sometimes, I&#8217;ve seen the myUser.class.php change made for you by installing the plugin. Don&#8217;t depend on that. Also, the myUser change seems to be missing the closing ?&gt; &#8230; bad plugin developers, no cookie. </del> Ok, nevermind. All of them are. It&#8217;s on purpose. Bad blogger, no cookie.</p>
<p>sfGuard registers the following routes: sf_guard_signin, sf_guard_signout, sf_guard_password automatically unless you specifically tell it not to. If you don&#8217;t like the URLs it assigns by default, then set</p>
<p>Now, since I&#8217;m forgetful, I change the default for my pages to be secure&#8230; that&#8217;s in $app/config/security.yml, set is_secure: on&#8230; and then set things to be insecure in my module level files where desired. I suggest this route. Security is meant to be established by default.</p>
<p>Clear your cache, and you should be good to go. Unlike most Syfmony plugins, sfGuard&#8217;s wiki documentation is pretty good and goes into lots of detail on how to set defaults.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/howto-implement-sfguard/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>WordPress 2.2.2 and Safari</title>
		<link>http://www.karlkatzke.com/wordpress-222-and-safari/</link>
		<comments>http://www.karlkatzke.com/wordpress-222-and-safari/#comments</comments>
		<pubDate>Sat, 08 Sep 2007 21:47:14 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[punditry]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/2007/09/08/wordpress-222-and-safari/</guid>
		<description><![CDATA[For a long time, I&#8217;ve used Safari to post with wordpress. But with my upgrade to 2.2.2 I&#8217;m not impressed. There&#8217;s CSS bugs in the admin panel. There&#8217;s problems with the editors &#8212; code only, becase the visual one doesn&#8217;t display. There&#8217;s problems with the javascript in the options screens. I had to crack open [...]]]></description>
			<content:encoded><![CDATA[<p>For a long time, I&#8217;ve used Safari to post with wordpress. But with my upgrade to 2.2.2 I&#8217;m not impressed.</p>
<p>There&#8217;s CSS bugs in the admin panel. There&#8217;s problems with the editors &#8212; code only, becase the visual one doesn&#8217;t display. There&#8217;s problems with the javascript in the options screens. I had to crack open Firefox just to change the link format.</p>
<p>I know that WordPress doesn&#8217;t claim to support Safari, but fer chrissakes &#8212; it&#8217;s the third of the big3, and makes up about 5% of the traffic to my site. I&#8217;m glad that the themes I&#8217;m using at least support Safari.<span id="more-26"></span></p>
<hr />
<h4>Related:</h4>
<div align="center">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" id="Player_95ad8483-9e6e-49d6-8a82-47a9587a693d"  WIDTH="400px" HEIGHT="150px"> <PARAM NAME="movie" VALUE="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F95ad8483-9e6e-49d6-8a82-47a9587a693d&#038;Operation=GetDisplayTemplate"><PARAM NAME="quality" VALUE="high"><PARAM NAME="bgcolor" VALUE="#FFFFFF"><PARAM NAME="allowscriptaccess" VALUE="always"><embed src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F95ad8483-9e6e-49d6-8a82-47a9587a693d&#038;Operation=GetDisplayTemplate" id="Player_95ad8483-9e6e-49d6-8a82-47a9587a693d" quality="high" bgcolor="#ffffff" name="Player_95ad8483-9e6e-49d6-8a82-47a9587a693d" allowscriptaccess="always"  type="application/x-shockwave-flash" align="middle" height="150px" width="400px"/> </OBJECT> <NOSCRIPT><A HREF="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&#038;MarketPlace=US&#038;ID=V20070822%2FUS%2Fkakaphpuanotg-20%2F8010%2F95ad8483-9e6e-49d6-8a82-47a9587a693d&#038;Operation=NoScript">Amazon.com Widgets</A></NOSCRIPT>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/wordpress-222-and-safari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freshbooks Plugin for Symfony</title>
		<link>http://www.karlkatzke.com/freshbooks-plugin-for-symfony/</link>
		<comments>http://www.karlkatzke.com/freshbooks-plugin-for-symfony/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 03:09:34 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=9</guid>
		<description><![CDATA[Two great flavors in one! Here’s the link to the plugin, the announcement on the freshbooks blog, and a link to Freshbooks itself.]]></description>
			<content:encoded><![CDATA[<p>Two great flavors in one! Here’s the link to the <a href="http://trac.symfony-project.com/trac/wiki/sfFreshBooksPlugin">plugin</a>, the <a href="http://developers.freshbooks.com/blog/2007/07/19/symfony-plugin-for-the-freshbooks-api/">announcement on the freshbooks blog</a>, and a <a href="https://www.freshbooks.com/subscribe.php?ref=5be58ce538886-1">link to Freshbooks itself</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/freshbooks-plugin-for-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

