Php symfony 3表单不适用于细枝渲染(控制器(';…';)
我想建立一个导航栏,显示在每个页面上。 因此,我将以下代码添加到Php symfony 3表单不适用于细枝渲染(控制器(';…';),php,forms,symfony,twig,Php,Forms,Symfony,Twig,我想建立一个导航栏,显示在每个页面上。 因此,我将以下代码添加到base.html.twig {{ render(controller( 'AppBundle:Navigation:index' )) }} 但是$form->isSubmitted()返回false和$form->getData()返回null。这仅适用于上面的细枝渲染方式。如果我正常地通过/Navigation-路径打开导航:索引页面,$form->isSubmitted()返回true,$form->getData
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(),
));
}
}
好的,我现在找到了一个解决方法。需要手动使$request
-对象可用
找到了这样做的方法
只需将细枝代码更改为:
{{ render(controller("SomeBundle:Foo:bar", {'request': app.request) }}
在action函数中添加$request变量
public function barAction($request) {
// other your code
}
现在表单代码应该可以工作了。好的,我现在找到了一个解决方法。需要手动使$request
-对象可用
找到了这样做的方法
只需将细枝代码更改为:
{{ render(controller("SomeBundle:Foo:bar", {'request': app.request) }}
在action函数中添加$request变量
public function barAction($request) {
// other your code
}
现在表单代码应该可以工作了。如果嵌入控制器,Symfony会通过内部子请求进行嵌入,这就是为什么isSubmitted为false,getData返回null
一种解决方法是按照您发现的那样传递原始请求
更好的选择是使用请求堆栈(通过request\u stack
service IIRC提供)及其getMasterRequest
方法。如果嵌入控制器,Symfony通过内部子请求执行,这就是为什么issubmitt为false,getData返回null
一种解决方法是按照您发现的那样传递原始请求
更好的选择是使用请求堆栈(通过request\u堆栈
serviceirc提供)及其getMasterRequest
方法。我也有类似的问题。我可以使用控制器或路由名称在细枝中渲染,但我在目标控制器上使用的knp分页调用认为该路由是渲染模板的控制器的路由,该模板随后按上述方式调用render。我有一个类似的问题。我可以使用控制器或路由名称在细枝中进行渲染,但我在目标控制器上使用的knp分页调用认为该路由是渲染模板的控制器的路由,该模板随后按上述方式调用render。