Hva er Symfony2 tilsvarende komponenter i Symfony1?

stemmer
20

I min Symfony2 søknaden, jeg vil ha en widget som vises på ulike sider. Dette kan ikke bare defineres ved sin mal, det må ringe DB og gå gjennom kontrolleren.

I Symfony1, ville jeg skape en komponent og ta den med. Hvordan kan jeg gjøre det samme i Symfony2?

Publisert på 22/05/2011 klokken 11:07
kilden bruker
På andre språk...                            


2 svar

stemmer
27

Jeg gjorde noen mer forskning, og den enkleste måten jeg fant var bare denne enkle linje i malen:

{% render 'MyBundle:MyController:myAction' %}

Dette sender ut resultatet av handlingen, med malen som er spesifisert av handlingen.

Svarte 23/05/2011 kl. 11:32
kilden bruker

stemmer
8

Du kan opprette Twig Extension med funksjon widgetog registrere den i beholderen. Også injisere Kernelinn i denne forlengelse.

class WidgetFactoryExtension extends \Twig_Extension
{
    protected $kernel;

    public function __construct($kernel)
    {
        $this->kernel= $kernel;
    }

    public function getFunctions()
    {
        return array(
            'widget' => new \Twig_Function_Method($this, 'createWidget', array('is_safe' => array('html'))),
        );
    }

    public function createWidget($name, array $options = array())
    {
        list($bundle, $widget) = explode(':', $name);

        $widgetClass = $this->kernel->getBundle($bundle)->getNamespace() . '\\Widget\\' . $widget;
        $widgetObj = new $widgetClass();

        $widgetObj->setContainer($this->kernel->getContainer());

        if ($options) {
            $widgetObj->setOptions($options);
        }

        return $widgetObj;
    }
}

Og etter denne skrive maler:

{{ widget('QuestionsBundle:LastAnswers', {'answersCount' : 10}) }}
{# class QuestionsBundle/Widget/LastAnswers #}
Svarte 22/05/2011 kl. 16:23
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more