我是Symfony的新手。当前版本:2.8.16 我的问题:我不管理重定向。
app / config / routing.yml :
gb_platform:
resource: "@GBPlatformBundle/Resources/config/routing.yml"
prefix: /platform
src / GB / PlatformBundle / Ressources / config / routing.yml :
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+
src / GB / PlatformBundle / Controller / AdvertController.php :
namespace GB\PlatformBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
class AdvertController extends Controller
{
public function indexAction()
{
$url = $this->get('router')->generate(
'gb_platform_view',
array( 'id' => 5)
);
return new Response("L'url de l'annonce d'id 5 est : ". $url);
}
public function viewAction($id)
{
return $this->redirectToRoute('gb_platform_home');
//return new Response("lol");
}
}
错误如下:
无法为指定路由“gb_platform_home”生成URL,因为此路由不存在。
我可以手动访问两个路径(可以到达“app_dev.php / platform /”)。 但是,网址生成仅适用于 gb_platform_view 。
我认为问题的根源可能在app / config / routing.yml文件中指定没有迭代...但是如果我这样做它并没有解决任何问题,似乎会产生更多问题。
我找到调试路由命令行:
php app / console debug:router
结果如下。
gb_platform_home正在清除识别路线,所以我不明白。 此外,您可能会注意到shell中的此路由有移位的唯一打印。为什么?解决的关键?
4个空格编码可能是问题吗?
感谢您的帮助。
答案 0 :(得分:2)
下面的解决方案可以按预期工作。
Requirement
和Default value
在生成路线时无法正常工作,而是在解析用户输入的网址时
你的控制器需要像这样定义:
// you must set the default value like that `$page = 1`
function indexAction(Request $request, $page = 1)
gb_platform_home:
path : /{page}
defaults:
_controller: GBPlatformBundle:Advert:index
page: 1
requirements:
page: \d*
gb_platform_home_: <------ use it to generate your empty route
path : /
defaults: { _controller: GBPlatformBundle:Advert:index }
我更喜欢使用路线作为注释的原因
/**
* @Route("/platform/{page}", requirements={"page": "\d*"} ,defaults={"page":1})
* @Route("/platform/{page}/", requirements={"page": "\d*"}, defaults={"page":1})
* @Route("/platform", name="gb_platform_home")
*/
function indexAction(Request $request, $page = 1)
{
}