我想构建一个导航栏,它会显示在每个页面上。
因此,我将以下代码添加到base.html.twig
{{ render(controller(
'AppBundle:Navigation:index'
)) }}
但是$form->isSubmitted()
会返回false
而$form->getData()
会返回null
。这只是上面的树枝渲染方式的情况。如果我通常通过/navigation
- 路线打开导航:索引页面,$form->isSubmitted()
会返回true
而$form->getData()
会返回表单数据。
这是NavigationController:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\Language;
use Doctrine\ORM\EntityManagerInterface;
use AppBundle\Form\Type\NavigationType;
class NavigationController extends Controller
{
/**
* @Route("/navigation", name="navigation")
*/
public function indexAction(Request $request, EntityManagerInterface $em)
{
$language = null;
$form = $this->createForm(NavigationType::class);
$form->handleRequest($request);
dump($language);
dump($form);
if($form->isSubmitted() && $form->isValid())
{
dump('is valid');
}
$data = $form->getData();
dump($data);
dump('isSubmitted(): ' . $form->isSubmitted());
dump($form->isSubmitted());
// replace this example code with whatever you need
return $this->render('navigation/index.html.twig', array(
'form' => $form->createView(),
));
}
}
有没有人有解决方法?
答案 0 :(得分:0)
$request
- 对象
找到here的方法。
只需将树枝代码更改为:
{{ render(controller("SomeBundle:Foo:bar", {'request': app.request) }}
并在action-function中添加$ request变量
public function barAction($request) {
// other your code
}
现在表单代码应该可以工作。
答案 1 :(得分:0)
如果您嵌入了控制器,Symfony会通过内部子请求来执行此操作,这就是为什么isSubmitted为false,并且getData返回null。
解决方法是传递原始请求,如您找到的那样。
更好的选择是使用请求堆栈(可通过request_stack
服务IIRC获得)及其getMasterRequest
方法。