As for the compatibility layer, due to the poor ability of PHP to
define functions dynamically, couldn't we imagine a code generator
that creates helper files in the cache with function helpers calling
their object counterpart? Something like the admin generator
mechanism...

That way, we would have:

- ability to use object helpers
- ability to extend existing helpers
- ability to override existing helpers
- ability to use function helpers
- BC
- performance (through cache)

What do you think ?

François

2008/7/4 Tamcy <[EMAIL PROTECTED]>:
>
> Let me try to summarize my thoughts here.
>
> I personally want object helpers because I may want it to be extended/
> overriden. Make it more "OOP syntax friendly" or more "modular" is a
> bonus.
>
> Yes, I like using this in templates:
>
> [php]
> // templateSuccess.php
> $_url = sfHelper::get('url');
> $_url->linkTo(..)
> [/php]
>
> and this in actions:
>
> [php]
> // *Action.class.php
> $_url = $this->helper->get('url');
> $_url->linkTo(..)
> [/php]
>
> To be honest I cannot find any compelling reason to argue it's far
> better than sfHelper::loadHelpers() + link_to.
> It can be a matter of taste.
>
> But I do want helpers to be extensible and overriddable.
>
> A real case: I need to append a session id to every links. Now I write
> a "my_url_for" and "my_link_to" to serve this purpose.
> For object helper, I can have a sfHelper to replace the alias "url"
> with myUrlHelper which overrides the original urlFor() method.
>
> This is not possible if helper class is implemented with static
> methods:
>
> [php]
> <?php
>
> class StaticLinkHelper
> {
>  public static function link()
>  {
>    echo "Called StaticLinkHelper::link()\n";
>  }
>
>  public static function to()
>  {
>    self::link();
>    echo "Called StaticLinkHelper::to()\n";
>  }
> }
>
> class OverridenLinkHelper extends StaticLinkHelper
> {
>  public static function link()
>  {
>    // This can't be called!
>    echo "Called OverridenLinkHelper::link()\n";
>  }
> }
>
> $olh = new OverridenLinkHelper;
> $olh->to();
> [/php]
>
> We cannot override StaticLinkHelper::link() due to the way PHP deals
> with static calls,
> at least before PHP 5.3. Otherwise it may be a wise idea to declare
> some helper method as
> static - after all $_url->linkTo() still works no matter linkTo() is
> static or not.
>
> But consider the current url_for function:
>
> [php
> function url_for($internal_uri, $absolute = false)
> {
>  static $controller;
>
>  if (!isset($controller))
>  {
>    $controller = sfContext::getInstance()->getController();
>  }
>
>  return $controller->genUrl($internal_uri, $absolute);
> }
> [/php]
>
> Instead of copying and wrapping it into UrlHelper::url() (or
> UrlHelper::to()),
> I still prefer to have the controller initialized at the __construct()
> or initialize() stage.
>
> So my answer is "yes" to
> 1. Whether we should have object helpers;
> 2. Should non-static methods be used;
> 3. Should there a "sfHelper" class/object to aggregate helpers and
> offer helpers to registered with aliases; and
> 4. Should helper alias be overridden when needed.
>
> Okay, I need to admit that I don't have much idea with IDE and
> designers because
> (1) I'm yet to find a comfortable IDE for me, and
> (2) My working company doesn't assign me a designer working solely for
> the templates :P
>
> What if a "compatibility layer" is offered as a plugin, just like the
> compat 1.0 one?
> So symfony can bundle with object helpers by default, and for those
> who wants IDE and
> have non-technical designers, they can download the plugin which
> offers them
> "url_for()" and friends. This is explicit, with code hint, and as
> url_for() still
> make calls to the class helpers, it is still possible to be extended/
> overridden at programming level.
> The only difference is that it is not meant to be a compatibility
> layer that will be deprecated.
>
> I would like to add that I actually think the extending/overriding
> functionality as something like
> factory.yml -- it should be an "advanced feature" which developers
> should better avoid to
> touch it unless they are fully aware of what it is about.
>
> Lastly, some personal thoughts concerning plugins.
>
> I think plugin developers should avoid overriding standard helper
> behaviors. So if a developer wants
> its own urlFor() method one should always write one's own
> "fooPluginUrHelper".
> This can avoid application developers (users of plugin) experiencing
> strange behaviors
> without being acknowledged. However this shouldn't be enforced -
> plugin authors may offer cool
> features by overriding helper behaviors.
>
> Combining all the above, application developers can override the
> behavior of helpers used by the plugin
> thanks to symfony's config file structure.
>
> Tamcy
>
>
> On Jul 4, 4:51 pm, "Bert-Jan" <[EMAIL PROTECTED]> wrote:
>> > On Fri, Jul 4, 2008 at 10:00 AM, Andreas Gehrke <[EMAIL PROTECTED]> wrote:
>>
>> >> I agree. Templates is for designers and helpers should be easy to use
>> >> and very explicit. Designers don't know OOP and shouldn't be forced
>> >> understand it.
>>
>> >> Please keep the existing explicit syntax. It works great :-)
>>
>> >> Btw, the above discussion clearly bear the mark of being between
>> >> developers. Shouldn't this decision at least be discussed with the
>> >> designers whom actually are going to use the functionality?
>>
>> > you are right : it must remain explicit and clear for designers.
>> > but developers being able to override default helpers is also a good
>> > thing for designers, as developers could provide better tools to them.
>>
>> > i don't think that anyone needs to understand oop to write
>> > $url->link_to(); or $form->checkbox_tag(); ? Actually, it makes more
>> > sense + wouldn't designers be happy to get syntax hints +
>> > documentation as they code ?
>>
>> Having hints is my only reason for using Zend Studio to write code...
>>
>>
>>
>> > ++
>> > tristan
>> > ++
>> > tristan
>>
>> > --
>> > Tristan Rivoallan
>> >http://www.clever-age.com
>> > Clever Age - conseil en architecture technique
>> > GSM: +33 6 219 219 33 Tél: +33 1 53 34 66 10
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony developers" group.
To post to this group, send email to symfony-devs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/symfony-devs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to