为了账号安全,请及时绑定邮箱和手机立即绑定

路由设置相关问题

洪老您好,我今天调试了一天路由的配置,有几个问题还是没有想明白,请洪老解惑。上代码:

第一个问题:

#app/config/routing.yml中路由配置
custom:
    resource: @CustomSiteBundle/Controller/
    type:     annotation
#src/Custom/SiteBundle/Controller/DefaultController.php

namespace Custom\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

// these import the "@Route" and "@Template" annotations
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

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

此时可以正常访问该路由:http://localhost/app.php,但是我新建一个Controller:

#src/Custom/SiteBundle/Controller/CommunalController.php

namespace Site\HomeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

// these import the "@Route" and "@Template" annotations
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

/**
 * @Route("/communal")
 */
class CommunalController extends Controller
{
    /**
     * @Route("/navgate")
     * @Template()
     */
    
    public function naygateAction()
    {
        return array();
    }
    
    /**
     * @Route("/sidebar")
     * @Template()
     */
    public function sideBarAction()
    {
        return array();
    }
    
    /**
     * @Route("/footer")
     * @Template()
     */
    public function footerAction()
    {
        return array();
    }
}

此时访问/communal下的任何一个方法都报404,http://localhost/app_dev.php/communal

查看官方文档有:

Including External Routing Resources

All routes are loaded via a single configuration file - usually app/config/routing.yml (see Creating Routes above). However, if you use routing annotations, you'll need to point the router to the controllers with the annotations. This can be done by "importing" directories into the routing configuration:

但不知我这错在那块?

还有app/config/routing.yml中custom指的是什么?和@Route("/", name="_demo")中的name是什么关系?


第二个问题:

#修改app/config/routing.yml
custom:
    resource: "@CustomSiteBundle/Resources/config/routing.yml"
#CustomSiteBundle/Resources/config/routing.yml
custom:
    resource: @CustomSiteBundle/Controller/
    type:     annotation

修改后访问http://localhost/app_dev.php,404

这块又是为什么,我只是换了位置?

请洪老答疑,我觉得路由这块洪老一笔带过,尤其是app/config/routing.yml与其他bundle的routing.yml之间关系讲的很简单,难道也是伏笔?

正在回答

3 回答

1.其实你不用试来试去,每个action最终的访问路径可以通过命令行工具查看,app/console router:debug

2.我不建议把yml里的key写成一样的,也就是说你第一个custom和第二个custom最好换成两个不重复的名字。判断routing是否设置成功,配置是否载入成功等等,最好的办法还是通过上面一条中说到的router:debug去分析,如果这个命令中出现了Path为/的路由,那么你的http://localhost/app_dev.php肯定是可以打开的,如果没有出现,则必定是404。


2 回复 有任何疑惑可以回复我~
#1

sfg 提问者

非常感谢!
2015-01-28 回复 有任何疑惑可以回复我~

补充一点,在routing.yml中定义路由和在annotation中定义路由是二选其一的两种定义路由的方式,所以虽然Route里可以定义name,但实际操作上并不会冲突。

0 回复 有任何疑惑可以回复我~
还有app/config/routing.yml中custom指的是什么?和@Route("/", name="_demo")中的name是什么关系?

custom就是指这个路由的名字,将来在模板中或者在controller中如果要生成指向某一个路由的链接,你就会用到这个名字。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

路由设置相关问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信