2013-07-14 195 views
1

這是我第一次嘗試處理表單,我遵循官方documentation for Symfony 2.3。顯示錶單已經解決了,但我一直無法處理它。Symfony2:提交表單提交

我得到以下錯誤:

Catchable Fatal Error: Argument 2 passed to Symfony\Component\Validator\Mapping\ClassMetadata::addPropertyConstraint() must be an instance of Symfony\Component\Validator\Constraint, array given, called in /home/torob/lampstack-5.4.16-0/apache2/htdocs/A/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php on line 90 and defined in /home/torob/lampstack-5.4.16-0/apache2/htdocs/A/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/ClassMetadata.php line 193

500 Internal Server Error - ContextErrorException

這裏是我的控制器:

public function newIdeaPostAction(Request $request){ 
    $idea = new Idea(); 

    $form = $this->createFormBuilder($idea) 
     ->add('title', 'text') 
     ->add('shortDescription', 'text') 
     ->add('valueDescription', 'text') 
     ->add('description', 'textarea') 
     ->add('Next', 'submit') 
     ->getForm(); 

    $form->handleRequest($request); 

    if($form->isValid()){ 
     return $this->redirect($this->generateUrl('ideside_idea_success')); 
    } 
} 

我知道,它的方法調用$form->handleRequest($request)創建錯誤。我也試圖從2.1的文檔做「老辦法」(他們說,這個handleRequest法是新的):

if ($request->isMethod('POST')) { 
    $form->bind($request); 
    if ($form->isValid()) { 
     // perform some action, such as saving the task to the database 
     return $this->redirect($this->generateUrl('task_success')); 
    } 
} 

這給了我同樣的錯誤。

額外的信息:

這裏是路線:

ideside_newidea_post: 
    path: /post/idea 
    defaults: { _controller: IdesideIdeaBundle:Default:newIdeaPost } 
    methods: [POST] 

這裏是堆棧跟蹤(... nameofproject /供應商/ symfony中/ symfony中/ src目錄/ Symfony的/分量/識別/製圖/ClassMetadata.php):

* 
* @return ClassMetadata This object 
*/ 
public function addPropertyConstraint($property, Constraint $constraint) 
{ 
    if (!isset($this->properties[$property])) { 
     $this->properties[$property] = new PropertyMetadata($this->getClassName(), $property); 

這裏是我的validation.yml(雖然我不知道這是否是相關的,因爲isVal之前發生的錯誤標識功能被稱爲在我的控制器):

Ideside\IdeaBundle\Entity\Idea: 
    properties: 
     title: 
      - NotBlank: {message: "blabla"} 
     shortDescription: 
      - NotBlank: {message: "blabla"} 
      - Length: {max: 115, maxMessage: "blabla", min: 6, minMessage: "blabla"} 
     valueDescription: 
      -Length: {max: 115, maxMessage: "blabla", min: 5, minMessage: "blabla"} 
     description: 
      - Length: {max: 5000, maxMessage: "blabla"} 

很抱歉打擾你們,如果這被證明是某種noobish錯誤的。 如果你們中的任何一個人能夠幫助我解決這個問題,你會爲我做一個很棒的贊成(如果我們的項目按預期進行的話,也可能是世界)。

+0

'bind()的'被稱爲'提交()'因爲Symfony的2.2,我認爲 – ferdynator

+0

謝謝你的提示比亞夫,ferdy! – Tor

+0

我嘗試用$ form-> submit($ request)替換$ form-> bind($ request),當重試舊的方式時,但仍然出現同樣的錯誤。 (順便說一句,如果你覺得它很有趣:看起來他們仍然在2.2文檔中使用bind(),但是現在當我在Php-storm中鍵入bind()時,我被告知它已折舊。) – Tor

回答

4

哇,這一個花了我一段時間弄清楚......你只是在你的valueDescription長度屬性中缺少短劃線和「L」之間的空格。

Ideside\IdeaBundle\Entity\Idea: 
    properties: 
     title: 
      - NotBlank: {message: "blabla"} 
     shortDescription: 
      - NotBlank: {message: "blabla"} 
      - Length: {max: 115, maxMessage: "blabla", min: 6, minMessage: "blabla"} 
     valueDescription: 
      // This is the original line 
      // You do not have a space between the dash and Length 
      // -Length: {max: 115, maxMessage: "blabla", min: 5, minMessage: "blabla"} 
      // It should be this 
      - Length: {max: 115, maxMessage: "blabla", min: 5, minMessage: "blabla"} 
     description: 
      - Length: {max: 5000, maxMessage: "blabla"} 
+0

謝謝!這解決了問題。那麼,我一定再也不會犯那個錯誤了。不知道如果沒有像你這樣的好人的幫助,我會做什麼。如果你曾經在特隆赫姆,想要一杯啤酒,請告訴我。 – Tor

+0

沒問題,總是樂於幫忙! –