Yii Framework Forum: Action Filter vs. Behavior - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Action Filter vs. Behavior

#1 User is online   qiang 

  • Yii Project Lead
  • Yii
  • Group: Yii Dev Team
  • Posts: 5,871
  • Joined: 04-October 08
  • Location:DC, USA

Posted 03 May 2012 - 10:21 AM

For 2.0, I am thinking to remove action filters in favor of behaviors. As you know, behaviors can respond to events of their owners. Using this mechanism, it is possible to make a behavior to work like a filter.

Of course, there are still some differences between filters and behaviors. Below are the ones that are not easy or straightforward enough to implement filters using behaviors:
  • Filters' before and after methods are properly nested.
  • If an inner filter's before method quits, the outer filters' after methods still get chance to be executed.


Your opinion is welcome!
0

#2 User is offline   Rodrigo Coelho 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 664
  • Joined: 05-August 10
  • Location:Rio de Janeiro, Brazil

Posted 03 May 2012 - 10:33 AM

I was a bit worried that with the new event system (which is great) the filtering features upon certain events would be completely removed. I'm glad to see this.

I'm ok with having behaviors instead of action filters.
0

#3 User is offline   Junior - df9 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 415
  • Joined: 24-May 09
  • Location:Brazil

Posted 03 May 2012 - 10:35 AM

Hi, Qiang!

Could you please explain or provide more details about what are the intended benefits of removing the feature? Think that it would help ppl giving feedback. (like improve performance, simplify app flow..)

Thanks
______________________________________
Junior
df9.com.br
Linux Registered User #364954
GNU/Linux: together we're ready!
0

#4 User is online   qiang 

  • Yii Project Lead
  • Yii
  • Group: Yii Dev Team
  • Posts: 5,871
  • Joined: 04-October 08
  • Location:DC, USA

Posted 03 May 2012 - 11:13 AM

My main consideration is to simplify the concepts, removing things that are unnecessary or redundant.

While filters are useful, they should not be limited to actions only. Theoretically, filters can be used in the whole request workflow. With events and behaviors, we can achieve this goal already.
0

#5 User is online   samdark 

  • Having fun
  • Yii
  • Group: Yii Dev Team
  • Posts: 3,308
  • Joined: 17-January 09
  • Location:Russia

Posted 03 May 2012 - 11:15 AM

How would an access control behavior look now?
Yii 1.1 Application Development Cookbook

Enjoying Yii? Star us at github: 1.1 and 2.0.
0

#6 User is online   qiang 

  • Yii Project Lead
  • Yii
  • Group: Yii Dev Team
  • Posts: 5,871
  • Joined: 04-October 08
  • Location:DC, USA

Posted 03 May 2012 - 01:28 PM

It will be similar to CAccessControlFilter, except that it needs to attach to the 'authorize' event of controller in its init() function.
The controller action work flow will consist of these events: authorize, beforeAction, beforeRender, afterRender, afterAction
2

#7 User is online   samdark 

  • Having fun
  • Yii
  • Group: Yii Dev Team
  • Posts: 3,308
  • Joined: 17-January 09
  • Location:Russia

Posted 03 May 2012 - 02:29 PM

Sounds good.
Yii 1.1 Application Development Cookbook

Enjoying Yii? Star us at github: 1.1 and 2.0.
0

#8 User is offline   yJeroen 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 06-September 11
  • Location:The Netherlands

Posted 03 June 2012 - 03:53 PM

View Postqiang, on 03 May 2012 - 01:28 PM, said:

It will be similar to CAccessControlFilter, except that it needs to attach to the 'authorize' event of controller in its init() function.
The controller action work flow will consist of these events: authorize, beforeAction, beforeRender, afterRender, afterAction

Question: Will you use ouput buffer to force the right order of beforeRender <output> afterRender? That way the events are even triggered if you use echo in the controller action.

Or will these two events only be implemented in the CController::render(), like it is now?
0

#9 User is offline   egorpromo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 66
  • Joined: 02-December 12

Posted 11 July 2013 - 09:48 AM

Concept behind behavior is very difficult. Why do you need remove simple filters (or so called "events" that rise on certain controller event)? With filters I can do simple and usefull thing: create some filter (filter-class), use some model in this filter and do usefull functionality making use of this model. I can do usefull functionality in needed places:before action execution, after action execution and so on. For example it can be redirection to another page if it is used before action. So it is obvious and I can use one model and one filter-class for all controllers in my project (because I can set one filter for all controllers in the same time via one or two lines of my php code).
When I read documentation I don't understand that filters are the same behaviors. I think filters are closed to events. So I am confused :blink: when read this post. IMHO: I think if you remove "filters" you make some useless stuff or something bad. :o
0

#10 User is online   qiang 

  • Yii Project Lead
  • Yii
  • Group: Yii Dev Team
  • Posts: 5,871
  • Joined: 04-October 08
  • Location:DC, USA

Posted 11 July 2013 - 11:03 AM

We still have ActionFilter base class which you can extend to create your filter classes.
The only thing changed is how you declare the filters in controller. In 1.1, you use filters(), while in 2.0 you use behaviors().
0

#11 User is offline   egorpromo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 66
  • Joined: 02-December 12

Posted 12 July 2013 - 08:23 AM

Please make good description and documentation what is Event system for. It is many times confused with 'behaviours' and 'filters'. And we can act in your discussions. Thanks!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users