首页 文章

无法获得Route Symfony

提问于
浏览
1

正如 Headers 所说的那样,我无法获得我最近添加的一些特定路线 . 我的symfony版本: 2.8.18 . 所以这里有详细信息:

路线我尝试匹配: - / platform / cat - / platform / cat /

档案 - app/config/routing.yml

gb_platform:
resource: "@GBPlatformBundle/Resources/config/routing.yml"
prefix:   /platform

档案 - GB\PlatformBundle\Resources\config\routing.yml

gb_platform_home_:
    path :   /
      defaults: { _controller: GBPlatformBundle:Advert:index }

gb_platform_home:
    path :   /{page}
    defaults: 
        _controller : GBPlatformBundle:Advert:index
        page: 1
    requirements:
        page: \d*

gb_platform_view:
    path :   /advert/{id}
    defaults: { _controller : GBPlatformBundle:Advert:view }
    requirements:
        id: \d+

gb_platform_add:
    path :   /add
    defaults: { _controller : GBPlatformBundle:Advert:add }

gb_platform_edit:
    path :   /edit/{id}
    defaults: { _controller : GBPlatformBundle:Advert:edit }
    requirements:
        id: \d+

gb_platform_delete:
    path :   /delete/{id}
    defaults: { _controller : GBPlatformBundle:Advert:delete }
    requirements:
        id: \d+

gb_platform_cat:
    path :   /cat
    defaults: { _controller : GBPlatformBundle:Category:index }

gb_platform_cat_view:
    path : /cat/{id}
    defaults: { _controller : GBPlatformBundle:Category:view }
    requirements:
        id: \d+

档案 - GB\PlatformBundle\Resources\controller\CategoryController.php

<?php

namespace GB\PlatformBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpFoundation\Response;

use GB\PlatformBundle\Entity\Advert;
use GB\PlatformBundle\Entity\Category;

class CategoryController extends Controller
{
    public function indexAction(Request $request)
    {

    }

    public function viewAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $catRepo = $em
            ->getRepository('GBPlatformBundle:Category');
        $cat = $catRepo
            ->find($id);

        if($cat === null)
        {
            throw new NotFoundHttpException("L'annonce d'id ".$id." n'existe pas.");
        }

        return $this->render('GBPlatformBundle:Category:view.html.twig', array(
            'category' => $cat,
            ));
    }
}

在原点,bundle的routing.yml无效 . 一旦修复,我尝试获取两个命令:

php app / console debug:router php app / console debug:router gb_platform_cat php app / console debug:router gb_platform_add

Debug Router

每个命令都是成功的,我看到/ cat和/ add在一个匹配和另一个匹配时没有区别 . 我也多次尝试清除缓存:

php app / console cache:clear --env prod

还是不行 . 我很困惑......错误很简单:找不到“GET / platform / cat / 7”的路线

3 回答

  • 0

    你已经定义了/ cat / 7而不是/ platform / cat / 7

    无论如何使用控制器中的注释而不是路由文件更好:

    /**
     * @Route("/platform/cat/{id}", name="gb_platform_cat_view")
     */
    public function viewAction($id)
    {
    
        $em = $this->getDoctrine()->getManager();
        $catRepo = $em
            ->getRepository('GBPlatformBundle:Category');
        $cat = $catRepo
            ->find($id);
    
        if($cat === null)
        {
            throw new NotFoundHttpException("L'annonce d'id ".$id." n'existe pas.");
        }
    
        return $this->render('GBPlatformBundle:Category:view.html.twig', array(
            'category' => $cat,
            ));
    }
    
  • 0

    根据docs,您需要围绕要求的模式引用 .

    gb_platform_cat_view:
        path : /cat/{id}
        defaults: { _controller : GBPlatformBundle:Category:view }
        requirements:
            id: '\d+'
    
  • 0

    我终于得到了解决方案 .

    首先要确保routing.yml文件的有效性 . 除了通常的symfony命令(它会告诉你一个错误),你可以使用如下的验证器:yamllint.com

    就我而言,路由配置是正确的 . 我知道symfony可以通过debug:router命令找到它们,并将它们与其他功能路由进行比较 .

    我注意到的是,即使更改可匹配的路由控制器,系统也不会考虑更新 . 显然,这是一个缓存问题 .

    在我真正开始使用时,拒绝这个假设,命令:

    php app / console cache:clear --env prod

    但问题是 生产环境 环境更全局化,所以我在没有指定env的情况下解决了我的问题:

    php app / console cache:清除

    你做过一次的错误,但不是两次,所以它是...;)

相关问题