2015-04-07 231 views
1

我有一個Symfony應用程序,它使用Sonata作爲後端管理和Sylius產品管理平臺。覆蓋資源控制器

我在管理類configureRoutes方法中創建了自己的創建路由。我想調用我們的資源控制器(將用於處理所有產品對象)來自奏鳴曲的CRUD方法。

這裏是我的configureRoutes方法迄今:

protected function configureRoutes(RouteCollection $collection) 
    { 
     $collection->add('create', 'create', array(
       '_controller' => 'AppBundle:Backend/Resource:createAction', 
       '_sylius' => array(
        'template' => 'AppBundle:Product/Backend/Form:CreateProduct.html.twig', 
        'redirect' => 'sylius_backend_product_show', 
       ) 
      ) 
     ); 
    } 

,但我得到了以下錯誤:

enter image description here

我resourceController擴展sylius資源控制器:

namespace AppBundle\Controller\Backend; 

use Sylius\Bundle\ResourceBundle\Controller\ResourceController as BaseController; 
use Symfony\Component\HttpFoundation\Request; 

/** 
* Class ResourceController 
* @package AppBundle\Controller\Backend 
*/ 
class ResourceController extends BaseController 
{ 
    /** 
    * @param Request $request 
    * 
    * @return RedirectResponse|Response 
    */ 
    public function createAction(Request $request) 
    { 
     // Custom view logic 
     return parent::createAction($request); 
    } 
} 

我的app/config.yml:

sylius_product: 
    driver: doctrine/orm 
    classes: 
     product: 
      model: AppBundle\Entity\Product 
      controller: AppBundle\Controller\Backend\ResourceController 
      form: 
       default: AppBundle\Form\Type\ProductType 
      translatable: 
       targetEntity: AppBundle\Entity\ProductTranslation 
     product_translation: 
      model: AppBundle\Entity\ProductTranslation 

sylius_resource: 
    resources: 
     app.backend.product: 
      driver: doctrine/orm 
      object_manager: default 
      classes: 
       controller: AppBundle\Controller\Backend\ResourceController 
       model: AppBundle\Entity\Product 

如何滿足構造函數參數?

+1

Sylius控制器是服務,所以應該在'sylius.controller.product:createAction'格式中調用,而不是'Sylius:Product:create'。 – qooplmao

+0

添加這個答案作爲我的男人:) – Kal

+0

出於好奇,從你可以看到,你可以做同樣的事情,但對於資源控制器,所以你可以通過'sylius.controller.resource'來調用它。 – Kal

回答

1

Sylius控制器是服務,所以應該在sylius.controller.product:createAction格式中調用,而不是Sylius:Product:create

資源束名稱根據您的資源名稱(app.backend.product),但命名產生類似的服務...

list($prefix, $resourceName) = explode('.', $name); 

...這意味着你的前綴是app和資源名稱將成爲backendproducts甚至沒有包含在命名中)。由於資源控制器的動作輸出全部由路由信息控制,所以並不需要具有特定的控制器。如果需要爲後端路由採取任何行動,您可以始終創建createBackendAction,但正如我所提到的,這可能不是必需的。