duanqiao0153
2014-10-02 18:17
浏览 47
已采纳

Symfony2:找不到路由/ demo / contactus

I am new to symfony and following the AcmeDemo i created a new page for Contact Us. At the moment it is working for the url localhost:8000/contactus but following the same implementation of demo/secured/login it should be localhost:8000/demo/contactus which gives 404.

I am not sure what wrong i am doing.

routing.yml

_demo_contactus:
 resource: "@AcmeDemoBundle/Controller/ContactusController.php"
 type:  annotation

ContactusController

<?php 

namespace Acme\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;


class ContactusController extends Controller
{
/** 
* @Route("/contactus", name="_demo_contactus")
* @Template()
**/
    public function indexAction()
    {
        return array();
    }
}

?>

And then i have my view which is i am sure correct. Please provide the detailed answer so that it can help me in clearing my concepts as well. Thanks !!!

图片转代码服务由CSDN问答提供 功能建议

我是symfony的新手,在AcmeDemo之后,我为联系我们创建了一个新页面。 目前它正在为url localhost:8000 / contactus工作,但是遵循相同的demo / secured / login实现,它应该是localhost:8000 / demo / contactus,它给出了404。

我不确定我在做什么。

routing.yml

  _demo_contactus:
 resource  :“@ AcmeDemoBundle / Controller / ContactusController.php”
 type:annotation 
   
 
 

ContactusController < pre> &lt;?php namespace Acme \ DemoBundle \ Controller; use Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller; use Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ Route; use Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ Template; class ContactusController扩展Controller { / ** * @Route(“/ contactus”,name =“_ demo_contactus”) * @Template() ** / 公共函数indexAction() { 返回array(); } } ?&gt; < p>然后我有了我的观点,我确信这是正确的。 请提供详细的答案,以便它也可以帮助我清理我的概念。 谢谢!!!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • doubei2231 2014-10-02 18:24
    最佳回答

    If you take a look at the SecuredController from the AcmeDemoBundle, you'll see that the class declaration has this annotation at the start:

    /**
     * @Route("/demo/secured")
     */
    class SecuredController extends Controller
    {
        // ...
    

    This annotation prefixes all subsequent routes in the Controller class with /demo/secured. Therefore, you should write your own Controller using the same fashion:

    /** 
     * @Route("/demo")
     */
    class ContactusController extends Controller
    {
        // ...
    

    See the docs concerning Route Prefixing for more information

    alternatively, you could also leave the ContactusController class alone and modify your route import instead:

    _demo_contactus:
        resource: "@AcmeDemoBundle/Controller/ContactusController.php"
        type:  annotation
        prefix: /demo
    

    You're also using the same route name twice, which means Symfony will reload routes and overwrite anything you had before for _demo_contactus. Try the following:

    routing.yml

    _demo_contactus:
        resource: "@AcmeDemoBundle/Controller/ContactusController.php"
        type:  annotation
    

    ContactusController

    <?php 
    
    namespace Acme\DemoBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
    
    /** 
     * @Route("/demo/contactus")
     */
    class ContactusController extends Controller
    {
        /** 
        * @Route("/", name="_demo_contactus_home")
        * @Template()
        **/
        public function indexAction()
        {
            return array();
        }
    }
    

    Make sure you try both /demo/contactus and /demo/contactus/.. it may be looking at that slash

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题