2013-10-14 165 views
0

我正在嘗試使用MongoDB。但是我有一些問題。錯誤提供默認值

# src/Controller/DefaultController.php 
public function editCategoryAction(Category $category) { 
    echo $category->getName(); 
    die(); 
} 

對於「實體」,這是好的,但不適用於MongoDB。

它顯示此錯誤消息:

控制器「網站\ StoreBundle \控制器\ DefaultController :: editCategoryAction()」要求您提供的「$類」參數的值(因爲沒有默認值或因爲在這之後有一個非可選的參數)。

我的類別文檔:

namespace Site\StoreBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Category 
{ 
    /** 
    * @MongoDB\Id 
    */ 
    protected $id; 

    /** 
    * @MongoDB\String 
    */ 
    protected $name; 

    /** 
    * @MongoDB\ReferenceMany(targetDocument="Product") 
    */ 
    private $products = array(); 

    public function __contructor() { 
     $this->products = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return id $id 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return self 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string $name 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    public function getProducts() { 
     return $this->products; 
    } 
    public function __construct() 
    { 
     $this->products = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Add product 
    * 
    * @param Site\StoreBundle\Document\Product $product 
    */ 
    public function addProduct(\Site\StoreBundle\Document\Product $product) 
    { 
     $this->products[] = $product; 
    } 

    /** 
    * Remove product 
    * 
    * @param Site\StoreBundle\Document\Product $product 
    */ 
    public function removeProduct(\Site\StoreBundle\Document\Product $product) 
    { 
     $this->products->removeElement($product); 
    } 
} 

我的路線

editCategory: 
    path: /editCategory/{id} 
    defaults: { _controller: SiteStoreBundle:Default:editCategory } 

我怎樣才能解決這個問題?

編輯: 我發現這篇文章:http://php-and-symfony.matthiasnoback.nl/2012/10/symfony2-mongodb-odm-adding-the-missing-paramconverter/

我改變了我的的src /網站/ StoreBundle /資源/配置/ services.yml這樣: 參數: #site_store.example.class :站點\ StoreBundle \實施例

services: 
    doctrine_mongo_db_param_converter: 
     class: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter 
     arguments: ['@doctrine_mongodb'] 

但相同的錯誤:/

+0

我假設你使用'ParamConverter',對嗎? –

+0

是這樣的:public'function editCategoryAction(Category $ category)' – Hotgeart

+0

是的,你是如何配置這個方法來使用'ParamConverter'?你使用YAML或XML來做到這一點嗎? –

回答

1

我想你錯過了標記你的服務:

services: 
    doctrine_mongo_db_param_converter: 
     class: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter 
     arguments: ['@doctrine_mongodb'] 
     tags: 
      - { name: request.param_converter, priority: -2, converter: doctrine_mongo_db_param_converter} 
+0

問題解決了。非常感謝 ! – Hotgeart

+0

不客氣! ;) –