The template is rendered within its own namespace unique to that
compilation, so you cannot inject subs directly. You can however pass
coderefs in the stash and then do $foobar->() in the template. But
namespacing the helpers seems reasonable to me.

-Dan

On Thu, Mar 29, 2018 at 9:47 AM, Leo Cacciari <leo.cacci...@gmail.com>
wrote:

> On Wed, Mar 28, 2018 at 2:39 PM, sri <kra...@gmail.com> wrote:
> >> That being said, I would ask to the collective wisdom of the group:
> >>
> >>   1. would proxy defined as explained in the cookboock work in
> templates?
> >
> >
> > Technically, you can always do "<%= $c->my_helper_prefix->foo('bar')
> %>".
> >
> When I read this I started banging my head on the desk: I had
> *completely missed* the paragraph in the rendering guide about the
> controller being accessible
> in the template scripts. Now that the headache has subsided, I can reply :)
>
> Since the main reason I wanted 'structured' helpers was that I had two
> helpers that logically should have had the same name but
> where actually quite different. So I thought to introduce two helpers:
> foo.foobar, to be used in the context of controller Foo to do foobnar,
> and bar.foobar meant to do a different foobar in the context of
> controller Bar.
>
> What I did, was to define methods Foo::_foobar and Bar::_foobar and
> then, in my app setup, define a single foobar helper with
>
>      $app->helper(foobar => sub {
>         my $c = shift;
>         return $c->_foobar(@_) if $c->$_can('_foobar');
>         # do something (e.g. croak)  to handle the case were the
> controller has no _foobar
>     });
>
>
> I tried to define directly Foo::foobar and Bar::foobar, but I get
> something like
>
>       Undefined subroutine
> &Mojo::Template::Sandbox::6bd05336357ba117d6ac9a329ea3a6ec::foobar
>
> meaning there is something (well, more than some thing) that I do not
> understand in how the functions are injected into the template object.
> However, the solution above works for me, and I'm content :).
> Obviously, I'm open to suggestion for better ways to do this.
>
> cheers
>
>
> --
> Leo Cacciari
>
> Aliae nationes servitutem pati possunt. Populi Romani est propria libertas.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Mojolicious" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to mojolicious+unsubscr...@googlegroups.com.
> To post to this group, send email to mojolicious@googlegroups.com.
> Visit this group at https://groups.google.com/group/mojolicious.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to