[英]Symfony2 How to have access to a set of data in all controllers?
我已经搜索过,但是找不到任何类似的问题,或者我措辞错了。 我要实现的是访问Bundle中所有控制器中的对象。 例如:
<?php
namespace Example\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class FolderController extends Controller
{
function indexAction()
{
$title = $this->folder->getTitle();
$description = $this->folder->getDescription();
}
}
通常在Symfony之外,我会使用BaseController extends Controller扩展自己的Controller类,并在构造方法中进行设置,但是我知道Symfony不使用构造方法,因此我对去哪里有些困惑。
我通常会这样做:
class BaseController extends Controller
{
function __construct()
{
parent::__construct();
//load up the folder from my model with an ID
$this->folder = $folder;
}
}
然后,我将从FolderController扩展BaseController并从那里开始,但是我已经用Symfony尝试了此操作,但它不起作用。 我已经研究过服务,但认为这不是我要做的工作。 如果需要更多详细信息,请告诉我,谢谢。
如果我正确理解您的问题,服务确实是您想要的。
首先,在services.yml
定义一个服务:
services:
vendor.folder_manager:
class: Vendor\FolderBundle\Entity\Manager\FolderManager
arguments:
em: "@doctrine.orm.entity_manager"
class: Vendor\FolderBundle\Entity\Folder
然后创建该FolderManager
类:
<?php
namespace Vendor\FolderBundle\Entity\Manager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
class FolderManager
{
protected $em;
protected $repo;
protected $class;
public function __construct(EntityManager $em, $class) {
$this->em = $em;
$this->class = $class;
$this->repo = $em->getRepository($class);
}
public function findById($id) {
return $this->repo->findById($id);
}
public function getRepository() {
return $this->repo;
}
}
最后,在您的控制器中:
$this->container->get('vendor.folder_manager')->findById($folderId);
要么:
$this->container->get('vendor.folder_manager')->getRepository()->findById($folderId);
Symfony2会自动将实体管理器的类注入管理器,因此您在控制器中需要提供的就是文件夹的ID。
编辑:要更漂亮,您还可以在控制器中创建快捷方式功能:
protected function getFolderManager()
{
return $this->container->get('vendor.folder_manager');
}
然后,您可以执行以下操作:
$this->getFolderManager()->findById($folderId);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.