如何在Silex中使用“render”在Twig中插入Controller

时间:2014-01-28 21:50:58

标签: php twig silex

它应该在Silex中使用symfony / twig-bridge吗?

{{ render(controller('MyController')) }}

现在我有这样的消息:

  

Twig_Error_Syntax:“...

中不存在”控制器“功能

3 个答案:

答案 0 :(得分:2)

你可以这样使用它:

{{ render(path('your_route_id', {'id': id, 'anotherParam': param})) }}

答案 1 :(得分:1)

我发现这有效:

{{ render(controller('services.controller:action', {[params]}) }}

您可以将控制器定义为服务:

$app['services.controller'] = function() use ($dependecy1, .., $dependencyN){
    return new \\PathToYourControllerClass($dependecy1, .., $dependencyN);
} 

答案 2 :(得分:1)

我发现这有效:

{{ render(controller('Full\\Namespace\\To\\Your\\Controller::listAction')) }}

请不要忘记双斜线' \\'

示例:

{{ render(controller('Acme\\ProductController::listAction')) }}

在您的ProductController中(我在本例中使用了Doctrine 2):

public function listAction(Application $application)
{
    $em = $application['orm.em'];

    $produits = $em->getRepository('Acme\Entity\Produit')->findAll();

    return $application['twig']->render('list.html.twig', array(
        'products' => $products
    ));
}

然后在list.html.twig

{% for product in products %}
  <h2> {{ product.name }} </h2>
{% endfor %}