symfony 4.1 无法生成 URL
symfony 4.1 Unable to generate a URL
在我的 synfony 应用程序中,我有两个控制器:
ActionController 应该只是呈现一个包含表单的模板。提交表单,我想向 SpreadSheetControllers 的 getSpreadSheet() 方法发送一个 GET 请求。
这是动作控制器:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ActionController extends AbstractController {
/**
* @Route("/action")
*/
public function action() {
$form = $this->createFormBuilder()
->setAction($this->generateUrl('/spreadSheet'))
->setMethod('GET')
->add('save', SubmitType::class, array('label' => 'Action'))
->getForm();
return $this->render('action.html.twig', array(
'form' => $form->createView(),
));
}
}
这里是 SpreadSheetController:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class SpreadSheetController extends AbstractController {
/**
* @Route("/spreadSheet")
*/
public function getSpreadSheet() {
return new Response(
'<html><body>spreadSheet</body></html>'
);
}
}
不过,在浏览 http://localhost:8000/action 时,我收到 RouteNotFoundException:
无法为命名路由“/spreadSheet”生成 URL,因为这样的路由不存在。
有人知道为什么找不到路由吗?
您必须引用路线的 名称,而不是实际的 url。像这样命名您的路线:
/**
* @Route("/spreadSheet", name="spreadsheet")
*/
然后在您的 ActionController 中引用该名称:
->setAction($this->generateUrl('spreadsheet'))
在我的 synfony 应用程序中,我有两个控制器: ActionController 应该只是呈现一个包含表单的模板。提交表单,我想向 SpreadSheetControllers 的 getSpreadSheet() 方法发送一个 GET 请求。
这是动作控制器:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ActionController extends AbstractController {
/**
* @Route("/action")
*/
public function action() {
$form = $this->createFormBuilder()
->setAction($this->generateUrl('/spreadSheet'))
->setMethod('GET')
->add('save', SubmitType::class, array('label' => 'Action'))
->getForm();
return $this->render('action.html.twig', array(
'form' => $form->createView(),
));
}
}
这里是 SpreadSheetController:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class SpreadSheetController extends AbstractController {
/**
* @Route("/spreadSheet")
*/
public function getSpreadSheet() {
return new Response(
'<html><body>spreadSheet</body></html>'
);
}
}
不过,在浏览 http://localhost:8000/action 时,我收到 RouteNotFoundException: 无法为命名路由“/spreadSheet”生成 URL,因为这样的路由不存在。
有人知道为什么找不到路由吗?
您必须引用路线的 名称,而不是实际的 url。像这样命名您的路线:
/**
* @Route("/spreadSheet", name="spreadsheet")
*/
然后在您的 ActionController 中引用该名称:
->setAction($this->generateUrl('spreadsheet'))