我正在使用自定义路由方法,因此下面的链接可由单个控制器操作处理:
/q-query_term
/category-category_name/city-city_name/q-query_term
/city-city_name/category-category_name/q-query_term
/city-city_name/q-query_term
/category-category_name/q-query_term
/city-city_name
/category-category_name
有可能吗?我不使用SensioExtraBundle
所以必须在yaml中写下路由。
例如在Zend Framework 2中,它很容易实现,因为我可以编写一个类来处理路由。不知道如何在Symfony中实现同样的目标,任何帮助都会受到赞赏。
我能想到的唯一方法是创建自定义路由加载器,计算所有路由排列并返回该集合,但不知道它是否是最佳解决方案。
这个问题是独一无二的,因为我需要使用单一路线名称而不是规定数十种不同的路线定义。
答案 0 :(得分:1)
一个简单的解决方案是将路线定义为全能......
# Resources/config/routing.yml
catch_all:
path: /{path}
defaults: { _controller: FooBarBundle:Catchall:dispatcher, path : "" }
requirements:
path: ".*"
...并在控制器中进行所有进一步处理:
# Controller/CatchallController.php
class CatchallController extends Controller
{
public function dispatcherAction(Request $request, string $path)
{
if (/* path matches pattern 1 */)
return $this->doQuery($request, $path);
elseif (/* path matches pattern 2 */)
return $this->doCategoryCityQuery($request, $path);
// ... and so on
else
return new Response("Page not found", 404);
}
private function doQuery($request, $path)
{
// do stuff and return a Response object
}
private function doCategoryCityQuery($request, $path)
{
// do stuff and return a Response object
}
}