Директива @Route не работает - что я делаю не так?

Я использовал composer.phar для установки стандартной версии Symfony 2.2.1, а затем использовал утилиту app / console для генерации "ClientBundle".

Я пытаюсь определить свои маршруты, используя аннотацию @Route. Вот мой контроллер:

namespace ScrumBoard\ClientBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;


class DefaultController extends Controller
{
    /**
     * @Route("/my/route/path")
     */
    public function indexAction($name)
    {
        return $this->render('ScrumBoardClientBundle:Default:index.html.twig', array('name' => $name));
    }
}

И мои связки определены так:

public function registerBundles()
{
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\AopBundle\JMSAopBundle(),
        new JMS\DiExtraBundle\JMSDiExtraBundle($this),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        new Acme\HelloBundle\AcmeHelloBundle(),
        new ScrumBoard\ClientBundle\ScrumBoardClientBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }

    return $bundles;
}

Вы можете видеть, что SensioFrameworkExtraBundle включен в мой список пакетов.

Однако, когда я захожу на http://symfony2.localhost/app_dev.php/my/route/path я получаю

ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /my/route/path"" at C:\webdev\scrum-whiteboard\symfony-quickstart\app\cache\dev\classes.php line 3609

Итак, очевидно, что я что-то упускаю... как заставить работать аннотации @Route?

JFYI, если я захожу на http://symfony2.localhost/config.php я вижу, что Symfony2 работает. Я получаю "Добро пожаловать в ваш новый проект Symfony". сообщение, и никаких ошибок конфигурации не отмечено.

2 ответа

Прежде всего, вам нужно включить информацию о маршрутизации в ваш основной файл маршрутизации. В противном случае Symfony ничего не узнает о ваших аннотациях маршрутизации. Это делается так же, как и другие файлы маршрутизации:

# app/routing.yml
acme_demo:
    resource: @AcmeDemoBundle/Controller/DemoController.php
    type: annotation

Обратите внимание на тип "аннотация", это означает, что Symfony будет искать @Route аннотаций. Вы также можете включить все контроллеры комплекта одновременно, используя @AcmeDemoBundle/Controller/ как ресурс.


Кроме того, аннотации - это просто классы, которые инициализируются в комментариях. Поэтому вам нужно импортировать правильное пространство имен, используя use заявления:

// src/Acme/DemoBundle/Controller/DemoController.php

// ...
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

// ...

Наконец, убедитесь, что вы не отключили аннотации маршрутизации. Это можно сделать примерно так:

# app/config.yml
sensio_framework_extra:
    router: { annotations: false }

Если у вас что-то подобное, аннотации маршрутизации не работают. Вам нужно установить его true, значение по умолчанию.


Для получения дополнительной информации см. Официальную документацию: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

Вот как я заставил это работать. Я не знаю, правильно ли это. Я должен был сделать две вещи.

Сначала я добавил это в мой файл routing.yml:

ScrumBoardClientBundle:
  resource: "@ScrumBoardClientBundle/Controller/"
  type:     annotation
  prefix:   /scrum

И затем я добавил это выражение "использование" в верхней части моего контроллера:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

Как только я это сделал, мои маршруты начали работать. Мне нужно было добавить / scrum к моему пути, поэтому мой полный путь превратился в:

http://symfony2.localhost/app_dev.php/scrum/my/other/path

Пожалуйста, сообщите, если я сделал это правильно. Спасибо!

Другие вопросы по тегам