Passing parameters from the action to the view: Symfony vs Yii


Symfony | Frameworks | Technical | Yii | January 8, 2011

This is the first post in the Symfony vs Yii series, that compare common functionalities between Symfony 1 and Yii, specifycally symfony 1.4.8 and Yii 1.1.5.

In the Model View Controller pattern, the controller needs to send information to the view, to be properly displayed to the user. This information is send in form of variables. Then, this time I will show how to pass custom variables from the controller (Yii) or action (symfony) to the view (Yii) or template (symfony).

To accomplish this task, there is two ways in Yii:

 

Yii way

As a parameter to the render method

In the protected/controllers/MessageController.html"php">  class MessageController extends Controller { public function actionHelloWorld() { $var = 'This is my test variable';   $this->render('helloWorld', array('var' => $var)); } }  

In the protected/views/helloWorld.html"php">  ... ?php echo $var ?> ...  

This will display:

 
  This is my test variable
 

As you can see, the second parameter of the controller's render method contains the variables that will be available in the view file.

 

As a property of the Controller class

In the protected/controllers/MessageController.html"php">  class MessageController extends Controller { public $var;   public function actionHelloWorld() { $this->var = 'This is my test variable';   $this->render('helloWorld'); } }  

In the protected/views/helloWorld.html"php">  ... ?php echo $this->var ?> ...  

This will display:

 
  This is my test variable
 

In Yii, the view file has access to the controller class through the $this variable, then, writing $this->var will retrieve the var property.

 

Symfony way

As a magic property of the controller class

In the apps/frontend/modules/Message/actions/actions.class.html"php">  class MessageActions extends sfActions { public function executeHelloWorld(sfWebRequest $request) { $this->var = 'This is my test variable'; }}  

In the apps/frontend/modules/Message/templates/helloWorldSuccess.html"php">  ... ?php echo $var ?> ...  

This will display:

 
  This is my test variable
 

 

As you can see, in Symfony there is no need to indicate the template, it defaults to the {action name}Success.html"Magic Methods" href="https://php.net/manual/en/language.oop5.magic.html" target="_blank">magic methods __get, __set, __isset and __unset, implemented by sfComponent class, which is an ancestor in the inheritance hierarchy of the sfActions class.

In short words this __get and __set magic methods allow to assigned any unexistent property to the class.  Internally this properties are saved in a varHolder property which can be considered as an associative array. Then this array is extracted to the template file. This way you can use your previous assigned "properties" in the template file.

 

If someone ask me, I prefer the Symfony way because you have to write a little less code, but again this is my opinion.

Every MVC framework must implement a way to pass variables from the controller to the view, in this case it was showed how to do this with two awesome PHP frameworks: Symfony and Yii.

 


Comments


Sam said about about 9 hours later

I have some questions about Symfony way:

1. How do I know which template is called?
2. What if I need to call non-default template?

robo47 said about about 16 hours later

@SAM

1) Jonathan already wrote that,
Each Controller has its own templates directory and by default each action->method uses a template called after the action->name suffixed with 'Success.html'

2) In the action->method of the Action->class you can tell which one to use:

$this->setTemplate($name, $module);

second parameter is optional.

@Jonathan
Not beeing allowed to insert semikolon and other things like the greater or less signs makes it hard to comment with code

Jonathan Nieto said about 1 day later

@robo47

Sorry :), I have to fix that.

RellDeemn said about 8 days later

imparato molto

David Dreggors said about 30 days later

@Jonathan
I am enjoying the write ups on Yii vs Symfony but I have to admin (as a Yii user) that I am a bit surprised to see that you have not at all mentioned the things that make Yii a great framework.

There has been no mention of comparison between the creation of the webapp which Yii makes so easy, I have not seen any mention Gii which is amazing for modeling databases and creating initial forms with validation rules already in place, nor have I seen any mention of a half dozen of the other ease of use features that Yii employs.

Could you please comparisons on actual web app creation?
ie... yiic webapp MyWebApp vs symfony init-project, symfony init-app, symfony init-module

Could you please show a comparison on Gii model/CRUD creation vs Symfony doing the same?
ie... How does Symfony create models of the database tables and does it create views with forms already handling Create/Read/Update/Delete complete with form validation based on table/column/field constraints?

David Dreggors said about 30 days later

oops first line should read:

I am enjoying the write ups on Yii vs Symfony but I have to admit

Jonathan Nieto said about about 1 month later

@David

I'm really glad you enjoy my articles about Symfony and Yii.

As you may have read, I started with a new project in Yii, because of that these series of articles. The already written articles are about functionalities that I needed to use in Yii. Even though I already used the project initialization, I did not use Gii because the project I'm working on does not need a lot of CRUD's, instead it needs a lot of javascript/jQuery functionalities.

I'll try to write more articles for the Symfony vs Yii series, but right now I'm doing the complex UI the project needs with jQuery.

In the upcoming days I'll be writing an article about Symfony and Yii autoloading capabilities.

Thanks for the nice comment!

SahKafhourf said about about 1 month later

Sorry for the stupid question. What is the best search engine https://google.com or https://yahoo.com?



Hey Stranger, leave a comment:

Last Posts

Autoloading: Symfony vs Yii

Symfony2, PhpBB4 and Drupal8

Type and boolean columns with Doctrine and Symfony

Refactoring queries with Doctrine

Extending your Doctrine Model: Template Classes

Integrating Doctrine: Symfony vs Yii

Passing parameters from the action to the view: Symfony vs Yii

Yii framework

Adding custom information to your Doctrine schema

PHP Advent Calendar 2010


My Tweets

10 days ago
I'm sooo not looking forward to getting up for work tomorrowwww - cant wait for this thing to work! https://tinyurl.com/67rg4lo
12 days ago
finally this class #semester is finished, new #projects in mind
20 days ago
Mark Zuckerberg Explains His Law Of Social Sharing [Video]https://t.co/sqq10Ehh via@TechCrunchh
about 1 month ago
retomando mi #twitter #notime
about 1 month ago
Inspiring for ANYONE who hates their job and their STUPIDD GD BOSS https://tinyurl.com/3cz3pan
about 1 month ago
How Facebook Can Put Google Out of Businesshttps://t.co/HqDfQGoo via@TechCrunchh
2 months ago
So why not just cut out the middle man? Microsoft.https://techcrunch.com/2011/05/15/samsung-series-5-chromebook/
2 months ago
really like to #design class hierarchies with #compositepattern
3 months ago
Similarly, Microsoft.com started to use jQuery instead of their own ASP.NET Ajax framework. They are still using Windows, for whatever XD
3 months ago
Estudiantes de la PUCP le “voltean” campaña a esposo de Keiko | yoperiodhttps://t.co/ruI9UnmI9Unm@lamulaamula
3 months ago
Reading: Apress.-.Pro.html"https://www.twitter.com/search?q=#php">#php #performance #read
3 months ago
debug_backtrace() is very important on certain situations. #php #debug
3 months ago
@alvarezrodrich felicitaciones!
4 months ago
time to do some #uml diagrams, #classdiagram
4 months ago
hoy es el día,#votaa conciente#peruu
4 months ago
@skoop @funkatron I think someone had a bad day!, #Frameworks are there but you don't have to use them.
4 months ago
making #wireframes for a new #functionality
4 months ago
so much #spam on my #blog =(
4 months ago
learning new topics and tools that I did not use before #rcp
4 months ago
aprendiendo muchos temas y herramientas que no utilizaba antes #rcp
4 months ago
#tweaking httpd.conf #virtualhost
4 months ago
thanks #symfony 1.4, even when i'm not using the entire #framework, yours classes save my life!
4 months ago
integrating with #SOA using #soap
4 months ago
It seems my most #productive working hours are on #sunday #afternoon #evening! XD
4 months ago
#ASOT 500 =)
4 months ago
installing SCA_SDO on #Centos #php
4 months ago
My web service using #soap worked!!!!! #php #SCA #SDO
4 months ago
Working in a new place since last week!, #RCP: Red Científica Peruana, the one which sells the .pe domains in#Perúú ->#happypy
5 months ago
Finally with a new #laptop: #Toshiba =)
5 months ago
@pasku1 Thanks, I will try Pivotaltracker.
5 months ago
@doolphy thanks for your answer doolphy! I'll try you!
5 months ago
@jmasson thanks for your answer! Jira + Confluence is a good combination.
5 months ago
Which is the best project management and collaboration tool right now? #projectmanagement #tool #collaboration
5 months ago
What a #voice! Sied Van Riel feat Nicole McKenna - Stealing Time (Aly & Fila Remix) + #ASOT 497 #trancefamily
5 months ago
working on a situation where #php #traits would be very useful
5 months ago
It is #awesome when you finish doing a lot of changes and nothing is broken =) #TDD #testing
5 months ago
oh, happy birthday! @mtabini o mejor dicho feliz cumpleaños!
5 months ago
why do #IE8 not accept #javascript "const" keyword?
5 months ago
Discovering there is much #more to do with #javascript ... a lot.
5 months ago
Awesome #song!: Cerf, Mitiska & Jaren - Another World (Original Vocal Mix) #ASOT 495 #trancefamily
6 months ago
My legal woman is #PHP, but I have an affair with #Javascript, overall when she wears #jQuery.
6 months ago
This presentation is one of the best I've seen about #unit #testing https://www.slideshare.net/avalanche123/clean-code-5609451
6 months ago
where to do a master on #IT: US or Spain? #survey #php #master plz RT
6 months ago
Bobina feat. Betsie Larkin - You Belong To Me: What a #beautiful voice -> #ASOT 494 #arminvanbuuren
6 months ago
OH NO, IT'S MONDAY -- 2011-02-07 https://t.co/pgaIxe5 via @gojkoadzic
6 months ago
it was not a + b, it was parserInt(a) + parseInt(b) =(, #javascript #fail
6 months ago
The models are complete representations of the system, whereas an #architectural #view focuses only on what is architecturally #significant.
6 months ago
@jmasson that would be great and finally #wikimedia, #drupal, #wordpress and maybe #joomla would push towards the same side, the #php side.
6 months ago
@jmasson Thanks!, #PHP has a bright #future ahead.
6 months ago
A new #blog post about not reinventing the #wheel: /article/symfony2_phpbb4_and_drupal8 #symfony #phpbb #drupal
6 months ago
@giorgiosironi #indeed, that's a very good #question. I think an average of 4 but also depends on how much that #developer work.
6 months ago
It seems the new platform for deploying, managing and scaling PHP apps is https://orchestra.io/ #cool
6 months ago
#Phase project planning vs #iteration project #planning - #project #management
6 months ago
#jeditable with #jquery save my life =)
6 months ago
Amazing #song -> Sied van Riel feat. Nicole McKenna - Stealing Time #ASOT 493 #trancefamily
6 months ago
I simply love "offset" #jquery function =)
6 months ago
I really don't understand why projects like #drupal does not base their components in projects like #doctrine and #symfony
6 months ago
OH NO, IT'S MONDAY -- 2011-01-17 https://t.co/37pr4Bd via @gojkoadzic
6 months ago
@alvarezrodrich me alegra ver q ya borró su cuenta Sr. Rodrich,#twitterr es malo jajja, XD
6 months ago
Acabo de hacerle a mi #brother @diegonl89 un blog para que hable de #actualidad en general: https://www.elgatotechero.com #peru
6 months ago
I just made to my #brother a #blog to talk about current #events in #peru: https://www.elgatotechero.com
6 months ago
Amazing things can be done with #javascript and #css, and of course with the help of #jQuery =)
6 months ago
An architecturally significant element is an element that is important for #understanding the #system.
6 months ago
An architecturally element has a wide impact on the #structure, #performance, #robustness, #evolvability, and #scalability of a #system.
6 months ago
@giorgiosironi Definitely!
6 months ago
Playing with #table #inheritance in #Doctrine
6 months ago
Reading about #RUP, and how addresses the #major difficulties in a new #project.
6 months ago
A new blog #post about #refactoring your queries with #Doctrine: /article/refactoring_queries_with_doctrine #symfony
6 months ago
Yandex in 2010: 43 percent revenue growth https://t.co/cpjT5Jw via @cnet
6 months ago
Going forward!!!!! =) poco a poco llegan los resultados de tanto esfuerzo #fb
6 months ago
Perfect #system with respect to the #requirements but the #wrong system with respect to the #real #problem at the time of #delivery.
6 months ago
Going #forward! =) #fb
6 months ago
A new #blog #post about integrating #Doctrine with #Yii and #Symfony: /article/integrating_doctrine_symfony_vs_yii
6 months ago
@sam_dark Ok thanks!, but I don't understand why in #Yii documentantion use $_GET and $_POST instead of CHttpRequest https://bit.ly/i5emoL