1

symfony2 の連絡先フォームに問題があります。これは、私が実行したコードと、どのようなエラーが発生するかです。

<?php
// src/Aleksandar/IntelMarketingBundle/Resources/views/ContactType.php
namespace Aleksandar\IntelMarketingBundle\Resources\views;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Collection;


class ContactType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text', array(
                'attr' => array(
                    'placeholder' => 'What\'s your name?',
                    'pattern'     => '.{2,}' //minlength
                )
            ))
            ->add('email', 'email', array(
                'attr' => array(
                    'placeholder' => 'So I can get back to you.'
                )
            ))
            ->add('subject', 'text', array(
                'attr' => array(
                    'placeholder' => 'The subject of your message.',
                    'pattern'     => '.{3,}' //minlength
                )
            ))
            ->add('message', 'textarea', array(
                'attr' => array(
                    'cols' => 20,
                    'rows' => 2,
                    'placeholder' => 'And your message to me...'
                )
            ));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $collectionConstraint = new Collection(array(
            'name' => array(
                new NotBlank(array('message' => 'Name should not be blank.')),
                new Length(array('min' => 2))
            ),
            'email' => array(
                new NotBlank(array('message' => 'Email should not be blank.')),
                new Email(array('message' => 'Invalid email address.'))
            ),
            'subject' => array(
                new NotBlank(array('message' => 'Subject should not be blank.')),
                new Length(array('min' => 3))
            ),
            'message' => array(
                new NotBlank(array('message' => 'Message should not be blank.')),
                new Length(array('min' => 5))
            )
        ));

        $resolver->setDefaults(array(
            'constraints' => $collectionConstraint
        ));
    }

    public function getName()
    {
        return 'contact';
    }
}
?>

これは、ビューでレンダリングされる連絡先フォームのコードです。コントローラーからのコードです。

<?php

namespace Aleksandar\IntelMarketingBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{

/**
 * @Route("/contact", _name="contact")
 * @Template()
 */      

         public function contactAction()
    {

    $form = $this->createForm(new ContactType());

    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            $message = \Swift_Message::newInstance()
                ->setSubject($form->get('subject')->getData())
                ->setFrom($form->get('email')->getData())
                ->setTo('info@intelmarketing.es')
                ->setBody(
                    $this->renderView(
                        'AleksandarIntelMarketingBundle::contact.html.php',
                        array(
                            'ip' => $request->getClientIp(),
                            'name' => $form->get('name')->getData(),
                            'message' => $form->get('message')->getData()
                        )
                    )
                );

            $this->get('mailer')->send($message);

            $request->getSession()->getFlashBag()->add('success', 'Your email has been sent! Thanks!');

            return $this->redirect($this->generateUrl('contact'));
        }
    }

    return array(
        'form' => $form->createView()
    );

    }


}

そして、ここに発根があります

aleksandar_intel_marketing_contactpage:
    pattern:  /contact
    defaults: { _controller: AleksandarIntelMarketingBundle:Default:contact }

ページを開こうとすると、次のように表示されます。

「[セマンティカル エラー] メソッド Aleksandar\IntelMarketingBundle\Controller\DefaultController::contactAction() のアノテーション "@Route" はインポートされませんでした。このアノテーションに "use" ステートメントを追加するのを忘れたのでしょうか? 500 内部サーバー エラー - AnnotationException "

何が問題なのか知っている人がいたら教えてください

4

1 に答える 1

3

エラー メッセージに示されているように、コントローラ ファイルの上に use ステートメントがありません。

追加するだけです:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

あなたのクラスの上にDefaultController

次に、ルーティングを次のものに置き換えることができます。

aleksandar_intel_marketing:
    resource: "@AleksandarIntelMarketingBundle/Controller/DefaultController.php"
    type:     annotation

このように、ルートを宣言する@Routeデフォルトの方法の代わりにアノテーションを使用しています。yml

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html

于 2013-08-06T16:09:44.447 に答える