Symfony2为控制器创建可重用类和函数的最佳实践


symfony2 best practice for creating a resuable class and function for controller

我有一个方法来找到所有类别如下

public function showAllCategory()
{
    $category = $this->getDoctrine()
        ->getRepository('AppBundle:Category')
        ->findAll();
    return $category;
}

函数在我的默认控制器中,返回的对象将分配给模板,如果需要为我网站的每个页面显示categoryes,我如何避免每次为每个控制器添加此函数?

所以把你的动作放在一个控制器,将在任何地方使用(如MainControllerSiteController(我通常使用一个主要的indexAction()是))。

// MainController.php
public function showAllCategory()
{
    $category = $this->getDoctrine()
                ->getRepository('AppBundle:Category')
                ->findAll();
    return $category;
}

并在你的Twig模板中使用:

{{ render(controller('AppBundle:Main:showAllCategory')) }}

您将需要在app/Resources/views/Main/showAllCategory.html.twig中使用适当的Twig模板(假设您使用的是Symfony2.7)。

正如James Akwuh所说,我更喜欢使用Twig Extensions。

在我看来,它可以是困难的任何人谁将更新控制器,知道正在从视图调用。当它是一个分支扩展时,你已经知道它是在视图层中专门使用的一些逻辑。