<?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>Amphee Web Tech Pvt. Ltd. &#187; symfony</title>
	<atom:link href="http://blog.amphee.com/index.php/category/web-development/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.amphee.com</link>
	<description></description>
	<lastBuildDate>Wed, 04 May 2011 05:34:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
	
	<!-- google ad injected by adsense-optimizer http://www.adsenseoptimizer.de -->
	<div  style="padding:3px; display: block; margin-left: auto; margin-right: auto; text-align: center;"><!-- Ad number: 1 --><script type="text/javascript"><!--
    	 
    	google_ad_client = "pub-0687753067406098"; google_alternate_color = "FFFFFF";
		google_ad_width = 468; google_ad_height = 60;
		google_ad_format = "468x60_as"; google_ad_type = "text_image";
		google_ad_channel =""; google_color_border = "A6C9E2";
		google_color_link = "FF3019"; google_color_bg = "FFFFFF";
		google_color_text = "000000"; google_color_url = "7EB544";
		google_ui_features = "rc:0"; //--></script>
		<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>	<item>
		<title>Setting up a symfony project with PHPUnit on Hudson</title>
		<link>http://blog.amphee.com/index.php/2010/10/26/setting-up-a-symfony-project-with-phpunit-on-hudson/</link>
		<comments>http://blog.amphee.com/index.php/2010/10/26/setting-up-a-symfony-project-with-phpunit-on-hudson/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 11:05:56 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[download symfony1.2]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[symfony 2.0. symfony 1.0]]></category>
		<category><![CDATA[symfony development]]></category>
		<category><![CDATA[symfony phpunit on hudson]]></category>

		<guid isPermaLink="false">http://blog.amphee.com/?p=292</guid>
		<description><![CDATA[We are using Hudson now for several months as Continous Integration System. This short article describes how we have configured a hudson project for a symfony 1.4 project. I am assuming that the reader is already used to Hudson and knows how a normal project has to be configured.
PHPUnit is the test framework of our [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>We are using Hudson now for several months as Continous Integration System. This short article describes how we have configured a hudson project for a symfony 1.4 project. I am assuming that the reader is already used to Hudson and knows how a normal project has to be configured.</p>
<p>PHPUnit is the test framework of our choice (surprise, surprise) and we are using the sfPHPUnit2Plugin for all our projects. If you do not now this plugin you may first read another post where the usage and features are described in detail.</p>
<p>All requirements in short:</p>
<p>* Hudson has to be installed<br />
* Hudson plugin xUnit Plugin has to be installed<br />
* the symfony project needs the sfPHPUnit2Plugin<br />
* PHPUnit has to be installed on your test server</p>
<p>Ok, here the configuration steps of the hudson project:</p>
<p>1. Configure your project</p>
<p>Configure standard settings for a hudson project like source-code management settings or email notifications. Please check the official docs if you do not know how to handle this.</p>
<p>2. Add a shell build step</p>
<p>Building a symfony project in a test environment is pretty easy. With the help of some shell commands the project is completely configured and ready for testing. Those shell commands may be entered in the build step section of the hudson project. Defining the correct commands is the main part during the configuration process.</p>
<p>Our configuration looks like this:</p>
<p>1. cd $WORKSPACE/trunk<br />
2. sh _deployment/install_test.sh<br />
3. php symfony cc<br />
4. php symfony phpunit:test-all &#8211;configuration &#8211;options=&#8221;&#8211;log-<br />
5. junit=build/testresult_$BUILD_NUMBER.xml&#8221; cd build<br />
6. ln -s -f testresult_$BUILD_NUMBER.xml currentTestResult.xml</p>
<p>1. Jump in the project root of the project<br />
2. Install the project on the test server with the help of a internal shell script. This step includes for example the generation of the databases.yml.<br />
3. Clear the symfony cache (always a good choice)<br />
4. Run all PHPUnit tests including unit and functional tests. The test result is written in a jUnit compatible logfile (needed for the xUnit Plugin).<br />
5. Jump in the build directory, which is internally used by Hudson<br />
6. Symlink the latest testresult</p>
<p>3. Configure Post-Build-Action</p>
<p>After the xUnit Plugin is installed correctly, an additional PHPUnit Pattern field should be displayed in the post build action section. In this field has to be entered:</p>
<p>1 trunk/build/currentTestResult.xml</p>
<p>The options “Fail the build if test results were not updated this run” and “Delete temporary JUnit file” should be both checked.</p>
<p>The xUnit Plugin takes the currentTestResult.xml file, which was previously created with the help of the sfPHPUnit2Plugin and analyzes it. When everything works fine, you should be able to review the created test reports.</p>
<p>Here some screenshots how this result could look like.</p>
<p>Build history:<br />
<a href="http://dev.esl.eu/blog/wp-content/uploads/2010/10/hudson-01-300x230.png"><img class="aligncenter" title="hudson" src="http://dev.esl.eu/blog/wp-content/uploads/2010/10/hudson-01-300x230.png" alt="" width="300" height="230" /></a></p>
<p>Trend graph of the test results:</p>
<p><a href="http://dev.esl.eu/blog/wp-content/uploads/2010/10/hudson-02-300x138.png"><img class="aligncenter" title="hudson" src="http://dev.esl.eu/blog/wp-content/uploads/2010/10/hudson-02-300x138.png" alt="" width="300" height="138" /></a></p>
<p>You can find the original post here : <a href="http://dev.esl.eu/blog/category/symfony/" target="_blank">http://dev.esl.eu/blog/category/symfony/</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2010/10/26/setting-up-a-symfony-project-with-phpunit-on-hudson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony Tutorials: Using sfValidatorCallback</title>
		<link>http://blog.amphee.com/index.php/2010/10/26/symfony-tutorials-using-sfvalidatorcallback/</link>
		<comments>http://blog.amphee.com/index.php/2010/10/26/symfony-tutorials-using-sfvalidatorcallback/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 10:52:56 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[sfValidatorCallback]]></category>
		<category><![CDATA[symfony plugins]]></category>
		<category><![CDATA[symfony tutorials]]></category>

		<guid isPermaLink="false">http://blog.amphee.com/?p=286</guid>
		<description><![CDATA[Many times when you&#8217;re validating forms in symfony you need to do more than what the standard validators allow, and since you&#8217;re lazy you don&#8217;t feel like creating your own custom validator. sfValidatorCallback to the rescue!
sfValidatorCallback allows you to define your own validation function to be used for a given form field. It also allows [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Many times when you&#8217;re validating forms in symfony you need to do more than what the standard validators allow, and since you&#8217;re lazy you don&#8217;t feel like creating your own custom validator. sfValidatorCallback to the rescue!</p>
<p>sfValidatorCallback allows you to define your own validation function to be used for a given form field. It also allows you to scrub the data in any way you see fit. We&#8217;ll look at both uses.<br />
A Psudo-example</p>
<p>Since you can use the callback validator for literally anything you want, here&#8217;s a simple example of how to use a function in your model to validate a field on the form for that model object</p>
<p>In MyObjectForm.class.php:</p>
<p><strong>1.public function configure() {<br />
2. &#8230;<br />
3. $this-&gt;widgetSchema['some_text_field'] =<br />
4. new sfWidgetFormTextArea(array(&#8216;required&#8217;=&gt;false));<br />
5.<br />
6. $this-&gt;validatorSchema['some_text_field'] = new sfValidatorCallback(<br />
7. array(&#8216;callback&#8217;=&gt;<br />
8. array($this-&gt;getObject(), &#8217;someTextFieldValidatorHook&#8217;)<br />
9. )<br />
10. );<br />
11. &#8230;<br />
12. }</strong></p>
<p>Here we see that we&#8217;re setting the validator for some_text_field to our call back. The first parameter to the callback takes our options. For these we need to pass a callback, which takes the same parameters as PHP&#8217;s call_user_func. Since we want to call a method in our base model object, we&#8217;ll use an array as the first parameter to pass our object and the method we want to call. $this-&gt;getObject(); returns the model object of the form, and someTextFieldValidatorHook is what we want to call.</p>
<p>So, in MyObject.php, in your model folder:<br />
<strong><br />
1. public function someTextFieldValidatorhook($validator, $value) {<br />
2.<br />
3. //test $value, set $pass if its ok<br />
4.<br />
5. if($pass) {<br />
6. return $value;<br />
7. }<br />
8.<br />
9. else {<br />
10.<br />
11. $message = &#8220;I can write whatever I want here based on the results &#8220;.<br />
12. &#8220;of my test. The point is that this field didn&#8217;t validate though&#8221;;<br />
13.<br />
14. throw new sfValidatorError($validator, $message);<br />
15.<br />
16. }<br />
17.<br />
18. }<br />
</strong><br />
We can see here that the magic is throwing the exception when your test fails. The exception bubbles up and is caught by the form stuff on a higher level to render the error message to the user as you would expect.</p>
<p>Now, there are are a few things to keep in mind:</p>
<p>* sfValidatorError can take a message code and error messages as its second and third parameters. However, most of the time you use the call back, you&#8217;ll want to generate the error message internally, since its dependant on the test you just wrote. Still, remember that you can respond with canned error messages if you want.<br />
* Your data hasn&#8217;t been saved yet, so you really have no notion of what the other fields are unless you grab the request object and look at them.<br />
* You can make your validation method static if you want, but sometimes its helpful to have the old values of your current object, or you may have expanded your model object to do things beyond the standard get/set stuff.</p>
<p><strong>Is This Cool?</strong></p>
<p>Some may argue that this kind of validation doesn&#8217;t belong in your model object, and a separate validator object should be created. I can see that point, and I think I mostly agree with it, but there are exceptions to every rule. Sometimes this simple approach is the correct one, and it can streamline your development.</p>
<p>Still, you should keep in mind that your validation function is going to throw a validator exception, so indicate that you&#8217;ll need to catch it in your documentation if the test fails, or name the method something to show that it should only be used as a hook to the validator, as I&#8217;ve done with someTextFieldValidatorHook.<br />
Scrubbing</p>
<p>One last benefit of the validator is that it gives you a good way to scrub your data before you save it. Since your callback function (someTextFieldValidatorHook in our case) takes the value in to verify it and returns it at the end if the test passed, you can technically change it to whatever you want. Some possible ideas are:</p>
<p>1. Removing HTML<br />
2. Converting text links to actual links (bad example as you should probably do this on output)<br />
3. Formatting Phone Numbers<br />
4. Etc, etc</p>
<p><strong>That&#8217;s It</strong></p>
<p>Hope you found this useful. Feel free to share how you&#8217;ve used the callback validator in your applications.</p>
<p>You can find the original post here : <a href="http://www.pbtg.com/blogs/jim/tag/symfony" target="_blank">http://www.pbtg.com/blogs/jim/tag/symfony</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2010/10/26/symfony-tutorials-using-sfvalidatorcallback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SOAP WebService in Symfony</title>
		<link>http://blog.amphee.com/index.php/2010/10/25/soap-webservice-in-symfony/</link>
		<comments>http://blog.amphee.com/index.php/2010/10/25/soap-webservice-in-symfony/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 10:40:15 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[webservices in symfony]]></category>

		<guid isPermaLink="false">http://blog.amphee.com/?p=274</guid>
		<description><![CDATA[One interesting topic on web development is webservice development. There are several techniques to implement a webservice out there, and today I’ll talk about one technique that I worked in the recent past that I really like: SOAP. As per wikipedia:
SOAP, originally defined as Simple Object Access Protocol, is a protocol specification for exchanging structured [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>One interesting topic on web development is webservice development. There are several techniques to implement a webservice out there, and today I’ll talk about one technique that I worked in the recent past that I really like: SOAP. As per wikipedia:</p>
<p>SOAP, originally defined as Simple Object Access Protocol, is a protocol specification for exchanging structured information in the implementation of Web Services in computer networks. It relies on Extensible Markup Language (XML) as its message format and usually relies on other Application Layer protocols, most notably Remote Procedure Call (RPC) and HTTP for message negotiation and transmission. SOAP forms the foundation layer of the web services protocol stack providing a basic messaging framework upon which abstract layers can be built.</p>
<p>The plan for this tutorial is to build a complete set of webservice methods to interact with the citypicker, built in a previous post. For this, I’ll use a great symfony plugin called ckWebService. This plugin enables the developer to expose your actions as a SOAP webservices. Another great functionality is the built-in WSDL generator, that parses module’s doc comment in order to identify which actions should be exposed and it’s input/output parameters.</p>
<p>Let’s start by installing ckWebService plugin in our symfony project. I’ll not install the latest release, instead I’ll checkout from trunk svn, as it contains some nice improvements if compared to latest release:</p>
<p><strong>info@amphee.com [~/symfony/blog]# cd plugins/<br />
barrosws@barros.ws [~/symfony/blog/plugins]# svn co http://svn.symfony-project.com/plugins/ckWebServicePlugin/trunk ckWebServicePlugin</strong></p>
<p>OBSERVATION: Current trunk version has a small bug (actually a wrong variable name) that must be fixed before continuing:</p>
<p><strong> public function getResultProperty()<br />
{<br />
- return $this-&gt;resultMember;<br />
+ return $this-&gt;resultProperty;<br />
}<br />
</strong><br />
Now we need to configure the plugin in order to make it work. The read-me located at plugin page provides a complete guide to configure it. For this project we use a basic configuration:</p>
<p>apps/frontend/config/app.yml:</p>
<p><strong>soap:<br />
enable_soap_parameter: on<br />
ck_web_service_plugin:<br />
wsdl: soap.wsdl<br />
handler: ckSoapHandler<br />
persist: %SOAP_PERSISTENCE_SESSION%<br />
render: off<br />
result_callback: getSoapResult<br />
soap_options:<br />
encoding: utf-8<br />
soap_version: %SOAP_1_2%</strong></p>
<p><strong>apps/frontend/config/filters.yml:</strong></p>
<p><strong>soap_parameter:<br />
class: ckSoapParameterFilter<br />
param:<br />
condition: %APP_ENABLE_SOAP_PARAMETER%</strong></p>
<p><strong>apps/frondend/config/factories.yml:</strong></p>
<p><strong>soap:<br />
controller:<br />
class: ckWebServiceController<br />
</strong><br />
Done! That’s all we need to start exposing actions as SOAP webservices. For now on we can expose any of our previously created action by adding a special tag to the doc comment, like this:</p>
<p><strong>/**<br />
* Action description<br />
* @ws-enable<br />
*<br />
* @param string $name<br />
* @return boolean<br />
*/<br />
public function executeSomeAction($request)<br />
{<br />
/* action here */<br />
}<br />
</strong><br />
This doc comment will expose the action and instruct the WSDL generator that this action expects a string input parameter, called $name and that it will return a boolean value. An interesting thing about this plugin is that it will place all input parameters in the $request object, so the action can access it as if it was called from a browser, passing name as a query string or a post value:</p>
<p><strong>&#8230;<br />
$name = $request-&gt;getParameter(&#8216;name&#8217;);<br />
&#8230;</strong></p>
<p>Also, notice that $request parameter was removed from the doc comment. This is necessary because if we keep it, the WSDL generator will add $request as a parameter to the webservice, what is not the case here.</p>
<p>Let’s start the implementation for this project. We have three actions that will be exposed:</p>
<p><strong> * executeIndex: to list users;<br />
* executeEdit: to insert/edit users;<br />
* executeDel: to delete users.<br />
</strong><br />
One might think that we will need to add @ws-enable to these actions doc comment… well, yes, that’s the original idea, but I prefer using a different approach. My approach is to create a new module, called soap (or whatever you want) and create wrappers to actual actions. This will reduce the number changes needed to be done in the actual actions (sometimes it won’t require any change at all) and will make it possible for the developer to code the entire system without even caring about webservice, all adjustments can be easily made only when actually implementing the webservice. This is not the best way to achieve this result. The correct way to do this is to create a custom SoapHandler, but this will kill WSDL generator, so I’ll stick to my way by now (trunk version has all the necessary changes to make this possible – it’s not the case with latest release).</p>
<p>So, let’s create our new module:</p>
<p><strong>info@amphee.com [~/symfony/blog]# symfony generate:module frontend soap<br />
&gt;&gt; dir+      /home/amphee/symfony/blog/apps/frontend/modules/soap/templates<br />
&gt;&gt; file+     /home/amphee/symfony/blog/app&#8230;soap/templates/indexSuccess.php<br />
&gt;&gt; dir+      /home/amphee/symfony/blog/apps/frontend/modules/soap/actions<br />
&gt;&gt; file+     /home/amphee/symfony/blog/app&#8230;/soap/actions/actions.class.php<br />
&gt;&gt; file+     /home/amphee/symfony/blog/tes&#8230;al/frontend/soapActionsTest.php<br />
&gt;&gt; tokens    /home/amphee/symfony/blog/tes&#8230;al/frontend/soapActionsTest.php<br />
&gt;&gt; tokens    /home/amphee/symfony/blog/app&#8230;soap/templates/indexSuccess.php<br />
&gt;&gt; tokens    /home/amphee/symfony/blog/app&#8230;/soap/actions/actions.class.php</strong></p>
<p>The first action will expose is executeIndex, that will return a list of all users registered in the system. This is the simplest one and I’ll use to explain some important points:</p>
<p><strong>apps/frontend/modules/soap/actions/actions.class.php:</strong></p>
<p><strong> /**<br />
* Get users<br />
*<br />
* @ws-enable<br />
*<br />
* @return SoapUser[]<br />
*/<br />
public function executeGetUsers($request)<br />
{<br />
// call actual action<br />
$this-&gt;getController()-&gt;forward(&#8216;citypicker&#8217;,'index&#8217;);</strong></p>
<p><strong> // set result<br />
$actionInstance = $this-&gt;getLastActionInstance();<br />
$actionInstance-&gt;result = $actionInstance-&gt;users;<br />
}</strong></p>
<p>As I said before, we will create wrappers to actual actions. For this action, we don’t have any input parameter, so we don’t need any extra processing. First thing the action does is a forward to actual action. Note that I use the forward method from the controller instead of forward method from sfAction. This is necessary because we need continue our execution flow AFTER actual action returns (sfAction’s forward won’t return control to us). Return value is expected to be located in the deepest action instance, in our case, citypicker/index action, in a property called result (in our case, we store the result of a UserPeer::doSelect() call – made in citypicker/index action and stored in users property). In order to do this we need to get this action’s instance and that’s what getLastActionInstance method do:</p>
<p><strong>apps/frontend/modules/soap/actions/actions.class.php:</strong></p>
<p><strong> /**<br />
* Get last action instance<br />
*<br />
* @return sfActionInstance<br />
*/<br />
private function getLastActionInstance()<br />
{<br />
return $this-&gt;getController()-&gt;getActionStack()-&gt;getLastEntry()-&gt;getActionInstance();<br />
}</strong></p>
<p>This method will simply return last actions instance from the action stack, and we will use it in all of our wrappers. If you look at doc comments, you will notice return value is declared as an array of SoapUser objects. SoapUser class is defined as follows:</p>
<p><strong>lib/soap/SoapUser.class.php</strong></p>
<p><strong>class SoapUser<br />
{<br />
/**<br />
* User name<br />
*<br />
* @var string<br />
*/<br />
public $name;</strong></p>
<p><strong> /**<br />
* Country ID<br />
*<br />
* @var integer<br />
*/<br />
public $country_id;</strong></p>
<p><strong> /**<br />
* State ID<br />
*<br />
* @var integer<br />
*/<br />
public $state_id;</strong></p>
<p><strong> /**<br />
* City ID<br />
*<br />
* @var integer<br />
*/<br />
public $city_id;<br />
}<br />
?&gt;<br />
</strong><br />
Doc comments are REQUIRED here too, because WSDL generator will use it to build the object definition. When sending result back, our result (array of User objects) will be converted into SoapUser objects, making these properties available.</p>
<p>Our first method is complete. In order to start using it, we need to generate the WSDL definition, using the built-in WSDL generator. The generator will also create the frontend dispatcher, in web/ directory:</p>
<p><strong>info@amphee.com [~/symfony/blog]# symfony webservice:generate-wsdl frontend soap http://blog.barros.ws/symfony<br />
&gt;&gt; file-     /home/amphee/symfony/blog/web/soap.php<br />
&gt;&gt; file+     /home/amphee/symfony/blog/web/soap.php<br />
&gt;&gt; tokens    /home/amphee/symfony/blog/web/soap.php<br />
&gt;&gt; file+     /home/amphee/symfony/blog/web/soap.wsdl</strong></p>
<p>In order to test it we can use a nice piece of software called SoapUI. This software will read soap.wsdl and build the request, all using a nice GUI. I recommend downloading the trial of PRO version, as it is capable of generating forms (web like) where you can input parameters:</p>
<p>executeDel actions is similar to executeIndex:</p>
<p><strong>apps/frontend/modules/soap/actions/actions.class.php:</strong></p>
<p><strong> /**<br />
* Deletes an user<br />
*<br />
* @ws-enable<br />
* @param integer $id<br />
*<br />
* @return boolean<br />
*/<br />
public function executeDelUser($request)<br />
{<br />
// call actual action<br />
$this-&gt;getController()-&gt;forward(&#8216;citypicker&#8217;,'del&#8217;);</strong></p>
<p><strong> // set result<br />
$actionInstance = $this-&gt;getLastActionInstance();<br />
$actionInstance-&gt;result = true;<br />
}</strong></p>
<p><strong>Now, executeEdit (executeNewUser in our wrapper) is a bit trickier:</strong></p>
<p><strong>apps/frontend/modules/soap/actions/actions.class.php:</strong></p>
<p><strong> /**<br />
* Creates a new user in the system<br />
*<br />
* @ws-enable<br />
* @param SoapUser $user<br />
*<br />
* @return boolean<br />
*/<br />
public function executeNewUser($request)<br />
{<br />
// convert input param from OBJECT to ARRAY<br />
$request-&gt;setParameter(&#8216;user&#8217;,get_object_vars($request-&gt;getParameter(&#8216;user&#8217;)));</strong></p>
<p><strong> // call actual action<br />
$this-&gt;getController()-&gt;forward(&#8216;citypicker&#8217;,'edit&#8217;);</strong></p>
<p><strong> // check errors<br />
$actionInstance = $this-&gt;getLastActionInstance();<br />
if(!$actionInstance-&gt;form-&gt;isValid()) $this-&gt;throwSoapFormException($actionInstance-&gt;form);</strong></p>
<p><strong> $actionInstance-&gt;result = true;<br />
}</strong></p>
<p>First difference we can note is the fact this action requires one input parameters. In doc comment we declare that this action expects an SoapUser object as input, but the actual action expects an simple array. The first step then is to convert received object into an array. For this we use get_object_vars and after conversion, we set it back to the $request object. Finally we call actual action, that will act as if the user had submitted the form. Next difference is that we need to check if there was any error processing input data. We do this by checking if form, in actual action instance, is valid, and if not return an error message. In order to throw an exception with detailed errors, I created an small method called throwSoapFormException, that will iterate through all errors in the form and build single string, with one error per line:</p>
<p><strong>apps/frontend/modules/soap/actions/actions.class.php:</strong></p>
<p><strong> /**<br />
* Throw a SoapFault error based on form errors<br />
*<br />
* @param sfForm $form<br />
*/<br />
public function throwSoapFormException($form)<br />
{<br />
foreach($form-&gt;getFormFieldSchema()-&gt;getError() as $e)<br />
$errors[] = $e;</strong></p>
<p><strong> throw new SoapFault(&#8216;ERROR&#8217;,implode(&#8220;n&#8221;,$errors));<br />
}<br />
</strong><br />
And that’s it, we can now create new users using the new SOAP interface:</p>
<p><a href="http://blog.amphee.com/wp-content/uploads/2010/10/sf_blog.png"><img class="aligncenter size-full wp-image-275" title="sf_blog" src="http://blog.amphee.com/wp-content/uploads/2010/10/sf_blog.png" alt="" width="300" height="225" /></a></p>
<p>Well, actually one small thing is missing to make it really work… Did u notice that I didn’t touch actual actions yet? Sometimes we don’t need to touch it, but that’s not our case. If you look at citypicker post you will notice that both “del” and “edit” actions redirect the user back to index page on success. We can’t do this when running on soap mode, or we will lose control and we won’t be able to send correct result back to the client. To fix this, we just need to make an small change:</p>
<p><strong>if(!$this-&gt;isSoapRequest()) return $this-&gt;redirect(&#8216;citypicker/index&#8217;);<br />
</strong><br />
isSoapRequest is a new method added by ckWebservicePlugin and it will return true when executing the actions via SOAP. Adding this check we just perform the redirect when NOT in SOAP mode.</p>
<p>That’s all we need to talk about how to expose your actions via SOAP, but in order to complete our example, we need to create some methods to fetch countries/states/cities informations. For this we create 6 new actions:</p>
<p><strong> /**<br />
* Get countries list<br />
* @ws-enable<br />
*<br />
* @return SoapGeo[]<br />
*/<br />
public function executeGetCountries($request)<br />
{<br />
$this-&gt;result = CountryPeer::doSelect(new Criteria());<br />
}</strong></p>
<p><strong> /**<br />
* Get a country<br />
*<br />
* @ws-enable<br />
* @param integer $id<br />
*<br />
* @return SoapGeo<br />
*/<br />
public function executeGetCountry($request)<br />
{<br />
$this-&gt;result = CountryPeer::retrieveByPK($request-&gt;getParameter(&#8216;id&#8217;));<br />
}</strong></p>
<p><strong> /**<br />
* Get states list<br />
*<br />
* @ws-enable<br />
* @param integer $country_id<br />
*<br />
* @return SoapGeo[]<br />
*/<br />
public function executeGetStates($request)<br />
{<br />
$country = CountryPeer::retrieveByPK($request-&gt;getParameter(&#8216;country_id&#8217;));<br />
if(!$country) throw new SoapFault(&#8216;ERROR&#8217;,'Invalid country&#8217;);</strong></p>
<p><strong> $this-&gt;result = $country-&gt;getStates();<br />
}</strong></p>
<p><strong> /**<br />
* Get a state<br />
*<br />
* @ws-enable<br />
* @param integer $id<br />
*<br />
* @return SoapGeo<br />
*/<br />
public function executeGetState($request)<br />
{<br />
$this-&gt;result = StatePeer::retrieveByPK($request-&gt;getParameter(&#8216;id&#8217;));<br />
}</strong></p>
<p><strong> /**<br />
* Get cities list<br />
*<br />
* @ws-enable<br />
* @param integer $state_id<br />
*<br />
* @return SoapGeo[]<br />
*/<br />
public function executeGetCities($request)<br />
{<br />
$state = StatePeer::retrieveByPK($request-&gt;getParameter(&#8217;state_id&#8217;));<br />
if(!$state) throw new SoapFault(&#8216;ERROR&#8217;,'Invalid state&#8217;);</strong></p>
<p><strong> $this-&gt;result = $state-&gt;getCitys();<br />
}</strong></p>
<p><strong> /**<br />
* Get a city<br />
*<br />
* @ws-enable<br />
* @param integer $id<br />
*<br />
* @return SoapGeo<br />
*/<br />
public function executeGetCity($request)<br />
{<br />
$this-&gt;result = CityPeer::retrieveByPK($request-&gt;getParameter(&#8216;id&#8217;));<br />
}</strong></p>
<p>And to finish, we need to create the SoapGeo class, that will store country name and id:</p>
<p><strong>lib/soap/SoapGeo.class.php:</strong></p>
<p><strong>class SoapGeo<br />
{<br />
/**<br />
* ID<br />
*<br />
* @var integer<br />
*/<br />
public $id;</strong></p>
<p><strong> /**<br />
* Name<br />
*<br />
* @var string<br />
*/<br />
public $name;<br />
}<br />
</strong><br />
And we’re done. With this we can now build an external app to create/edit/delete users in the database. I spent several days working with the plugin before coming up with this solution and I hope this will save other developers some time dealing with SOAP implementations.</p>
<p>You can find original post here : <a href="http://blog.barros.ws/2008/11/16/soap-webservice-in-symfony/" target="_blank">http://blog.barros.ws/2008/11/16/soap-webservice-in-symfony/</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2010/10/25/soap-webservice-in-symfony/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	
	
	<!-- google ad injected by adsense-optimizer http://www.adsenseoptimizer.de -->
	<div  style="padding:7px; display: block; margin-left: auto; margin-right: auto; text-align: center;"><!-- Ad number: 2 --><script type="text/javascript"><!--
    	 
    	google_ad_client = "pub-0687753067406098"; google_alternate_color = "FFFFFF";
		google_ad_width = 468; google_ad_height = 60;
		google_ad_format = "468x60_as"; google_ad_type = "text_image";
		google_ad_channel =""; google_color_border = "E3FA11";
		google_color_link = "FFFFFF"; google_color_bg = "A2AB2B";
		google_color_text = "000000"; google_color_url = "FFFFFF";
		google_ui_features = "rc:0"; //--></script>
		<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>	<item>
		<title>Interesting symfony plugins: sfSyncContentPlugin</title>
		<link>http://blog.amphee.com/index.php/2010/06/21/interesting-symfony-plugins-sfsynccontentplugin/</link>
		<comments>http://blog.amphee.com/index.php/2010/06/21/interesting-symfony-plugins-sfsynccontentplugin/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 06:07:07 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[symfony development]]></category>
		<category><![CDATA[symfony plugins]]></category>

		<guid isPermaLink="false">http://blog.amphee.com/?p=163</guid>
		<description><![CDATA[With the amount of plugins published in the symfony site, many great plugins get lost in the maze. With this series of posts, we would like to bring some attention to plugins we use every day or that we think are essential for any symfony developer.
sfSyncContentPlugin
Deploying symfony applications is always a key part of developing [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>With the amount of plugins published in the symfony site, many great plugins get lost in the maze. With this series of posts, we would like to bring some attention to plugins we use every day or that we think are essential for any symfony developer.</p>
<h2>sfSyncContentPlugin</h2>
<p>Deploying symfony applications is always a key part of developing and maintaining websites that run on symfony. It is always a recommended practice to do development on a local environment or dedicated development server. It is also recommended to have a QA/staging server that is as close as possible to your production server. Using this well proven method you can spot problems and bugs before everybody else sees or experiences them, you know, those bugs that “only” happen in production, don’t tell me that it never happened to you, I won’t believe you.</p>
<p>Anyway, making changes in a live site is not only not recommended, it should never be done!</p>
<p>When developing and testing symfony applications, a lot of times you need to have a copy of the live data. Or you may have a staging server where you make changes before pushing them to a live site in a production server. symfony already provides a way to deploy code changes to a remote server, but what about uploaded and data files? And database content?</p>
<p>Since we discovered and started using it, we can’t live without the<a href="http://www.symfony-project.org/plugins/sfSyncContentPlugin">sfSyncContentPlugin plugin</a> by Tom Boutell and Alex Gilbert, also developers of<a href="http://www.apostrophenow.com/">Apostrophe CMS</a>. This plugin helps with all the tasks and needs described above. Using it is quite simple. All you need to do is define your servers in config/properties.ini like this:</p>
<pre>[qa]
  host=qa.example.com
  port=22
  user=user
  dir=/var/www/mysite

[prod]
  host=www.example.com
  port=22
  user=user
  dir=/var/www/mysite

[staging]
  host=staging.example.com
  port=22
  user=user
  dir=/var/www/mysite</pre>
<p>Make sure to use SSH keys to authenticate to your remote servers, so you don’t get asked again and again for passwords. Then just run the following symfony tasks:</p>
<pre>
<pre># Migrate files and DB from development to qa
./symfony project:sync-content frontend dev to qa@qa

# Migrate files and DB to production (always make a backup of production before doing this!)
./symfony project:sync-content frontend dev to prod@prod

# Migrate files and DB from QA into development
./symfony project:sync-content frontend dev from prod@prod</pre>
</pre>
<p>Files and DB content are copied accordingly, almost magically. It saves so much time, but please make sure you understand and check the order that you apply in the symfony task. With the power this plugin provides, is very easy, by mistake, to overwrite production data, so again, always make a backup!</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2010/06/21/interesting-symfony-plugins-sfsynccontentplugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Once Again SENSIO LABS comes with great things for developers [STAND ALONE COMPONENTS FOR PHP]</title>
		<link>http://blog.amphee.com/index.php/2009/10/31/once-again-sensio-labs-comes-with-great-things-for-developers-stand-alone-components-for-php/</link>
		<comments>http://blog.amphee.com/index.php/2009/10/31/once-again-sensio-labs-comes-with-great-things-for-developers-stand-alone-components-for-php/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 05:56:27 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/?p=152</guid>
		<description><![CDATA[Symfony Components are stand alone php libraries that can be handy in the development of php. Those are earlier coupled with the symfony and now available separately from the symfony package.
Just have look at those
YAML : PHP library that speaks yaml. YAML framework is the php library which take yaml as string and convert in [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Symfony Components are stand alone php libraries that can be handy in the development of php. Those are earlier coupled with the symfony and now available separately from the symfony package.</p>
<p>Just have look at those<br />
<strong>YAML</strong> : PHP library that speaks yaml. YAML framework is the php library which take yaml as string and convert in to php array. All in all it is great product if you want to use it in any of your php project.<br />
it is open source and available at <a href="http://components.symfony-project.org/yaml/">YAML Component of Symfony</a></p>
<p><strong>Templating</strong> : Which is templating engine, that you can use in any of your php project. It is the templating tool which you can use in any kind of templating system. Available at <a href="http://components.symfony-project.org/templating/">Templating System</a></p>
<p>And some other components available like <a href="http://components.symfony-project.org/event-dispatcher/">EVENT DISPATCHER</a>, <a href="http://components.symfony-project.org/dependency-injection/">DEPENDENCY INJECTION</a></p>
<p>And Request Handler The flexible micro-kernel for fast frameworks is coming sooner. have a look at<br />
<a href="http://components.symfony-project.org/">Symfony Components</a></p>
<p>All in all if you are now interested in symfony&#8217;s some of the features to implement only. THIS IS THE BEST OF COMPONENTS YOU CAN TRUST. AND YET NOT REQUIRED TO USE THE SYMFONY. It shows the robustness of symfony projects.</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/10/31/once-again-sensio-labs-comes-with-great-things-for-developers-stand-alone-components-for-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Have a look at the new Symfony 1.3 Alpha &amp;&amp; its features</title>
		<link>http://blog.amphee.com/index.php/2009/10/24/have-a-look-at-the-new-symfony-1-3-alpha-its-features/</link>
		<comments>http://blog.amphee.com/index.php/2009/10/24/have-a-look-at-the-new-symfony-1-3-alpha-its-features/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 17:04:40 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[php development]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/?p=146</guid>
		<description><![CDATA[Here are some of the advantages of SYMFONY Framework..
*  Compatible with as many environments as possible
* Easy to install and configure
* Simple to learn
* Enterprise ready
* Convention rather than configuration, supporting fallback calls
* Simple in most cases, but still flexible enough to adapt to complex cases
* Most common web features included
* Compliant with most [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Here are some of the advantages of SYMFONY Framework..</p>
<p>*  Compatible with as many environments as possible<br />
* Easy to install and configure<br />
* Simple to learn<br />
* Enterprise ready<br />
* Convention rather than configuration, supporting fallback calls<br />
* Simple in most cases, but still flexible enough to adapt to complex cases<br />
* Most common web features included<br />
* Compliant with most of the web &#8220;bests pratices&#8221; and with web &#8220;design patterns&#8221;<br />
* Very readable code with easy maintenance<br />
* Open-Source</p>
<p>Check it out the new Alpha Symfony 1.3 with new features&#8230; <a title="Symfony 1.3" href="http://www.symfony-project.org/installation" target="_blank">SYMFONY 1.3</a></p>
<ul>
<li><strong>WHAT&#8217;S NEW IN SYMFONY 1.3</strong></li>
</ul>
<p>This <strong>alpha</strong> version will be the next stable release, is not suitable for production use. You can follow its development use by having a look at the <a title="What's New in Symfony 1.3" href="http://www.symfony-project.org/tutorial/1_3/en/whats-new" target="_blank">Whats new</a> in Symfony 1.3 even if you are willing to explore the .pdf then please <a title="What's New in Symfony 1.3 pdf" href="http://www.symfony-project.org/get/pdf/whats-new-1.3-en.pdf" target="_blank">click here</a>.</p>
<ul>
<li><strong>Upgrading projects from Symfony 1.2 to Symfony 1.3</strong></li>
</ul>
<p>To upgrade your 1.2 project to a newer version of Symfony 1.3, you will find all the steps and other information through this.. please   <a title="Upgrade your project to 1.3" href="http://www.symfony-project.org/tutorial/1_3/en/upgrade" target="_blank">Click here</a> This document describes the changes made in symfony 1.3 and what need to be done to upgrade your symfony 1.2 projects. And If you want more detailed information on what has been changed/added in symfony 1.3, you can read the <a title="What's New in Symfony 1.3" href="http://www.symfony-project.org/tutorial/1_3/en/whats-new" target="_blank">What&#8217;s new?</a> tutorial.</p>
<ul>
<li><strong>Deprecations and removals in 1.3</strong></li>
</ul>
<p>Here are some of the deprecations and removals in newer version of symfony 1.3.To find the lists of all settings, classes, methods, functions, and tasks that have been deprecated or removed in symfony 1.3 please <a title="Deprecations and removals in Symfony 1.3" href="http://www.symfony-project.org/tutorial/1_3/en/deprecated" target="_blank">Click here</a></p>
<p>You can find the installation for the symfony 1.3 here <a title="Installation for Symfony 1.3" href="http://www.symfony-project.org/installation/1_3" target="_blank">Installation</a></p>
<p>And for the first time user don&#8217;t bother here you can have basic installation <a title="First Time User Guide" href="http://www.symfony-project.org/getting-started/1_3/en/" target="_blank">Getting Started</a></p>
<p>Here are some of the important links through which you can direct download the source for Symfony 1.3</p>
<ul>
<li><a title="Download Sandbox for Symfony 1.3" href="http://www.symfony-project.org/get/sf_sandbox_1_3.tgz" target="_blank">sf_sandbox_1_3.tgz</a></li>
<li><a title="Download Sandbox for Symfony 1.3" href="http://www.symfony-project.org/get/sf_sandbox_1_3.zip" target="_blank">sf_sandbox_1_3.zip</a></li>
</ul>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/10/24/have-a-look-at-the-new-symfony-1-3-alpha-its-features/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>symfony 1.2 features</title>
		<link>http://blog.amphee.com/index.php/2009/07/31/symfony-1-2-features/</link>
		<comments>http://blog.amphee.com/index.php/2009/07/31/symfony-1-2-features/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 04:36:19 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[php development]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[download symfony1.2]]></category>
		<category><![CDATA[php dev]]></category>
		<category><![CDATA[symfony1.2]]></category>
		<category><![CDATA[symfony1.2 features]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/?p=138</guid>
		<description><![CDATA[hi, we  all knows tht symfony 1.2 is released . today i  want to write about some symfony 1.2 features.

Features
The admin generator will be rewritten from scratch to leverage the new form framework. The main goal is to provide a more customizable and a more flexible admin generator.
The Propel plugin and the Doctrine [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>hi, we  all knows tht symfony 1.2 is released . today i  want to write about some symfony 1.2 features.<br />
<strong><br />
Features</strong><br />
The admin generator will be rewritten from scratch to leverage the new form framework. The main goal is to provide a more customizable and a more flexible admin generator.</p>
<p>The Propel plugin and the <strong>Doctrine plugin </strong>will be bundled with symfony 1.2. So, as of symfony 1.2, the core team will officially support Doctrine as a first class citizen.</p>
<p>The development of secure applications has always been quite easy with symfony thanks to the use of the ORM, the output escaper, and the CSRF protection. Symfony 1.2 will go one step further by providing native input filtering. We will base this feature on the new filter extension bundled with PHP 5.2.</p>
<p>The framework must simplify the life of the developer on repetitive and boring activities. As most applications send emails, the <strong>Swift library</strong>, one of the most feature-full and flexible solution for sending emails in PHP, will be integrated into the core.</p>
<p>The JavaScript world evolves very quickly, with lot of great frameworks available (prototype, jQuery, Dojo, mootools, and YUI). all the JavaScript stuff available into a plugin.<br />
The project:deploy task was just a proof of concept. So, it is time to start a discussion on the features we need for a proper deployment task.</p>
<p>The routing is now cached, so you can expect a significant performance boost when you got plenty of routes in your app. Also, the routing class is no more a singleton so you can now extend and reference it easily to fit your needs,</p>
<p>you can download symfony 1.1 from below given  links . <a class="wp-caption-dd" href="http://www.symfony-project.org/get/sf_sandbox_1_1.tgz"></a></p>
<p><a class="wp-caption-dd" href="http://www.symfony-project.org/get/sf_sandbox_1_1.tgz">sf_sandbox_1_1.tgz</a> <a class="wp-caption-dd" href="http://www.symfony-project.org/get/sf_sandbox_1_1.zip"></a></p>
<p><a class="wp-caption-dd" href="http://www.symfony-project.org/get/sf_sandbox_1_1.zip">sf_sandbox_1_1.zip</a></p>
<ul></ul>
<p>you can upgrade your existing symfony project into symfony1.2.</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/07/31/symfony-1-2-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	
	
	<!-- google ad injected by adsense-optimizer http://www.adsenseoptimizer.de -->
	<div  style="padding:3px; display: block; margin-left: auto; margin-right: auto; text-align: center;"><!-- Ad number: 3 --><script type="text/javascript"><!--
    	 
    	google_ad_client = "pub-0687753067406098"; google_alternate_color = "FFFFFF";
		google_ad_width = 468; google_ad_height = 60;
		google_ad_format = "468x60_as"; google_ad_type = "text_image";
		google_ad_channel =""; google_color_border = "A6C9E2";
		google_color_link = "FF3019"; google_color_bg = "FFFFFF";
		google_color_text = "000000"; google_color_url = "7EB544";
		google_ui_features = "rc:0"; //--></script>
		<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>	<item>
		<title>Now symfony with netbeans also</title>
		<link>http://blog.amphee.com/index.php/2009/07/09/now-symfony-with-netbeans-also/</link>
		<comments>http://blog.amphee.com/index.php/2009/07/09/now-symfony-with-netbeans-also/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 05:47:46 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[php development]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/?p=126</guid>
		<description><![CDATA[Last week, the NetBeans team announced that the next version of their IDE (6.8) will have native support for symfony! That&#8217;s a great news for all of us.  They have a dedicated page in their Wiki about symfony support in NetBeans, and the NetBeans 6.8 nightly builds already have some basic support for symfony, [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Last week, the NetBeans team announced that the next version of their IDE (6.8) will have native support for symfony! That&#8217;s a great news for all of us.  They have a dedicated page in their Wiki about symfony support in NetBeans, and the NetBeans 6.8 nightly builds already have some basic support for symfony, like the ability to run a task. To learn more, read Tomas Mysik&#8217;s blog post about what is already available.  That&#8217;s exiting, and I think we need to help them building a great IDE for symfony. I highly encourage you to download a 6.8 build, test it with your own projects, and give them feedback.<img src="http://blogs.sun.com/netbeansphp/resource/article_images/symfony3.png" alt="" width="469" height="296" /></p>
<p>content from.. <a href="http://www.symfony-project.org/blog/2009/07/08/symfony-support-in-netbeans-6-8" target="_blank">http://www.symfony-project.org/blog/2009/07/08/symfony-support-in-netbeans-6-8</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/07/09/now-symfony-with-netbeans-also/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vote For Symfony</title>
		<link>http://blog.amphee.com/index.php/2009/07/08/vote-for-symfony/</link>
		<comments>http://blog.amphee.com/index.php/2009/07/08/vote-for-symfony/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 07:01:30 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[php development]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[http://sourceforge.net/community/cca09/vote/?f=392]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/index.php/2009/07/08/vote-for-symfony/</guid>
		<description><![CDATA[You can vote! With over 47,000 nominations, the community has chosen 85 finalists in 12 categories. Take a look at our finalists and pick your favorites, or maybe even discover something useful you hadn’t heard of before. we are going to vote for symfony .
why we are going to vote for SYMFONY ?
chk this link [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>You can vote! With over 47,000 nominations, the community has chosen 85 finalists in 12 categories. Take a look at our finalists and pick your favorites, or maybe even discover something useful you hadn’t heard of before. we are going to vote for <strong>symfony</strong> .</p>
<p>why we are going to vote for <strong>SYMFONY</strong> ?</p>
<p>chk this link if you want to know about symfony <a href="http://sourceforge.net/community/cca09/vote/?f=392" target="_blank">http://www.symfony-project.org/</a></p>
<p>it show why we r going to vote symfony a best web development tool ever .</p>
<h3><strong> Vote For Symfony.  go to this link. <img src='http://blog.amphee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong><br />
<a href="http://sourceforge.net/community/cca09/vote/?f=392" target="_blank">http://sourceforge.net/community/cca09/vote/?f=392</a><br />
</h3>
<p>from,</p>
<p>jasmin patel</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 8px; width: 1px; height: 1px;">http://www.symfony-project.org/</div>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/07/08/vote-for-symfony/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>symfony 2.0</title>
		<link>http://blog.amphee.com/index.php/2009/07/06/symfony-2-0/</link>
		<comments>http://blog.amphee.com/index.php/2009/07/06/symfony-2-0/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 10:46:24 +0000</pubDate>
		<dc:creator>kiran vadariya</dc:creator>
				<category><![CDATA[php development]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[symfony 2.0. symfony 1.0]]></category>
		<category><![CDATA[symfony web development]]></category>

		<guid isPermaLink="false">http://blog.devloperworld.com/?p=114</guid>
		<description><![CDATA[hello readers,
today i w&#8217;ll tell you about symfony 2.0  upcoming version of symfony after sucess of symfony 1.0 and 1.2,
One thing is very intersting in symfony 2.0 is it&#8217;s  more faster then old versions.
also many features updated and change in controlorrs and many more &#8230;
if you want to  know more about symfony 2.0 then  click [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>hello readers,</p>
<p>today i w&#8217;ll tell you about symfony 2.0  upcoming version of symfony after sucess of symfony 1.0 and 1.2,</p>
<p>One thing is very intersting in symfony 2.0 is it&#8217;s  more faster then old versions.</p>
<p>also many features updated and change in controlorrs and many more &#8230;</p>
<p>if you want to  know more about symfony 2.0 then  <a href="http://fabien.potencier.org/talk/22/phpquebec-2009-symfony-2" target="_blank">click here </a></p>
<p>enjoy,</p>
<p>kiran <img src='http://blog.amphee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://blog.amphee.com/index.php/2009/07/06/symfony-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

