2

フォームを処理しようとするのはこれが初めてで、Symfony 2.3 の公式ドキュメントに従っています。フォームを表示することはできましたが、処理できませんでした。

次のエラーが表示されます。

キャッチ可能な致命的なエラー: Symfony\Component\Validator\Mapping\ClassMetadata::addPropertyConstraint() に渡される引数 2 は、Symfony\Component\Validator\Constraint のインスタンスでなければなりません。指定された配列は、/home/torob/lampstack-5.4.16 で呼び出されます。 -0/apache2/htdocs/A/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php 90 行目 /home/torob/lampstack-5.4.16-0/apache2 で定義/htdocs/A/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/ClassMetadata.php 行 193

500 内部サーバー エラー - 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-documentation から「古い方法」でそれをやろうとしました (彼らは handleRequest-method が新しいと言います):

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/vendor/symfony/symfony/src/Symfony/Component/Validator/Mapping/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です(ただし、コントローラーでisValid-functionが呼び出される前にエラーが発生するため、関連性があるかどうかはわかりません):

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"}

これがある種の愚かな間違いであることが判明した場合、皆さんを悩ませて申し訳ありません. 誰かが私を助けてくれれば、私に大きな恩恵をもたらすでしょう(そして、私たちのプロジェクトが意図したとおりに機能すれば、世界にも恩恵をもたらす可能性があります)。

4

1 に答える 1

5

うわー、これを理解するのにしばらく時間がかかりました... 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"}
于 2013-07-14T20:24:19.543 に答える