2013-05-21 7 views
0

composer.phar를 사용하여 Symfony 2.2.1 표준판을 설치 한 다음 app/console 유틸리티를 사용하여 "ClientBundle"을 생성했습니다.@ Route 지시문이 작동하지 않습니다 - 내가 뭘 잘못하고 있니?

@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 프로젝트에 오신 것을 환영합니다." 메시지가 표시되고 구성 오류가 표시되지 않습니다.

답변

0

다음은 어떻게 작동하는지 보여줍니다. 이것이 올바른지 나는 모른다. 나는 두 가지 일을해야했다.

첫째, 내 routing.yml 파일에 다음을 추가 :

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

I 번 : 다음

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

그리고 나는이 내 컨트롤러의 상단에 문을 "사용"에 추가 이렇게해라, 내 길은 일하기 시작했다. 내가 제대로이 작업을 수행 한 경우 알려 주시기 바랍니다

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

다음 내 경로에/스크럼을 추가 할 필요가 없었기 때문에 내 전체 경로로 돌았 다. 감사!

+2

당신은 접두사 옵션을 제거해야합니다. 그 밖의 모든 것은 정확합니다. 주석을 사용하여 올바른 사용 문을 사용하여 주석을 가져와야합니다. 그리고 sf가 주석을 사용하고 있다는 것을 알기 위해서 디렉토리를 리소스로 포함하고 'annotations'를 –

+0

타입으로 포함시켜야합니다. 접두사를 생략하는 것이 더 나은 이유는 무엇입니까? – Josh

+0

글쎄, 나는 접두사를 원하지 않을 거라 생각했다. 필수 옵션이 아니므로 생략 할 수 있습니다. 그것이 내가 말하려고했던 것입니다. –

0

우선 라우팅 정보를 기본 라우팅 파일에 포함시켜야합니다. 그렇지 않으면 Symfony는 라우팅 주석에 대해 아무 것도 모릅니다. 이것은 다른 라우팅 파일을 포함와 같은 방법을 사용하여 수행됩니다 :

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

공지 사항 유형 '주석'이 심포니는 @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