tags:

views:

595

answers:

3

There’s no setTemplate() for components! I know but maybe there is another way to do it ?

(The question seems to be about a php framework: http://www.symfony-project.org/)

+1  A: 

Components don't handle templates, you can only use partials. If you need to return a specific partial from inside your components class you can do something like this:

return get_partial('module/action', array('paramName' => $paramValue));

Have a look into the symfony book, chapter 7 view layer

virtualize
A: 

There is no setTemplate method on sfComponents. You essentially have 3 options:

  1. Name your component the same as the partial you'd like the component to render. This may not be possible if you have multiple components you'd like to share the same template.
  2. Create a partial with the same name of your component and include the partial there. That is, if you had a component with an executeFoo() method that you wanted to render the _bar.php template, simply call include_partial('bar', $args) inside of _foo.php.
  3. Load the PartialHelper and render the partial manually inside of the components execute method and have the component return sfView::NONE.
jeremy
But beware returning sfView::NONE on a component will not cache the component, at least in 1.0 - it is definitely worth checking the cache file is still generated
timmow
Are you sure the component will still not be cached even if text is rendered inside of it? If that is true, then yes, do not use method 3 if you want a cache-able component (I've never used method 3, myself.)
jeremy
A: 

To get around this, i'm doing:

echo get_component('module', 'action', $this->getVarHolder()->getAll());
return sfView::NONE;
jmoz