簡體   English   中英

Symfony2如何在所有控制器中訪問一組數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM