$controller->forward(...)
需要表单中的字符串 or MyBundle:Controller:action
,但我只有路线名称。
如何将请求转发到路由名称?
$controller->forward(...)
需要表单中的字符串 or MyBundle:Controller:action
,但我只有路线名称。
如何将请求转发到路由名称?
这个问题很老,但是为了文档和所有的谷歌人,这里是一种方法。
class Mycontroller extends Controller {
public function indexAction(){
$response = $this->forward($this->routeToControllerName('ROUTE_NAME_HERE'));
}
private function routeToControllerName($routename) {
$routes = $this->get('router')->getRouteCollection();
return $routes->get($routename)->getDefaults()['_controller'];
}
}
重定向到路由名称“主页”:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class TaskController extends AbstractController
{
public function goHome()
{
return $this->redirectToRoute('homepage');
}
}
提防
router->getRouteCollection()
在接受的答案中建议,但使用此方法会在每个请求上重新生成路由缓存,使应用程序非常慢。
https://github.com/symfony/symfony-docs/issues/6710