develooper Front page | perl.php.sandwich.dev | Postings from October 2005

PHP Template Global Variables

Thread Next
From:
David Wheeler
Date:
October 21, 2005 23:59
Subject:
PHP Template Global Variables
Message ID:
D69E9857-3517-4104-81C4-F4D5C99AC1E2@kineticode.com
Hi All,

Apologies for cross-posting, but I wanted to get feedback both from  
the Bricolage camp and from the PHP camp.

Right now, the Bricolage PHP burner sets up a single global variable,  
$BRIC. In it, you can access the typical Bricolage templating objects:

   <?= $BRIC['story']->get_title() ?>

However, in Mason and Template Toolkit templates, you can access  
these things directly:

   <% $story->get_title %>
   [% story.get_title %]

Now, the reason these variables ($story, $element, and $burner) are  
stored in $BRIC is because, as George told me, sticking stuff into  
the PHP global namespace is considered bad manners. Well, it's also  
bad manners in Mason, but I'm starting to lean toward moving these  
variables directly into the PHP namespace for consistency with the  
Mason and TT burners, as well as for simpler code:

   <?= $story->get_title() ?>

Since the Bricolage templates are a relatively controlled  
environment, I'm personally not too worried about the pollution. But  
what do you think?

One wrinkle: code evaluated from the PERL_LOADER directive currently  
can export symbols into the namespace used by the Mason and TT  
templates. For example, if I have

   PERL_LOADER = use HTML::Entities;

Then I can use the exported encode_entities() function directly in  
the Mason or TT templates:

   <% encode_entities($story->get_title) %>
   [% encode_entities(story.get_title) %]

I'd like to do this in the PHP templates, too, but this also means  
that more stuff will be stuck into the global namespace:

  <?= encode_entities($BRIC['story']->get_title()) ?>

So getting rid of $BRIC[] and just using $story, $element, and  
$burner directly goes right along with that:

   <?= encode_entities($story->get_title()) ?>

Granted, HTML::Entities is not a great example (I know that PHP has  
its own functions for that), but there are other useful things  
exported by PERL_LOADER code, such as burner constants. So consider  
it a given that Bricolage will be putting PERL_LOADER exports into  
the PHP namespace.

Anyway, your feedback would be greatly appreciated.

Many TIA,

David

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About