在我的Symfony 3项目中,我使用FossUserBundle,我想要实现的是将我为注册页面开发的扩展表单呈现给另一个控制器 WITHOUT 重定向。
换句话说,我想要实现的是通过Ajax和/register
调用/
路由来呈现表单。因此,我想要执行第一步并尝试在/
而不是/register
中呈现表单,但所有后期操作都将在/register
因此我尝试了以下内容:
我已将Appbundle
类更改为:
namespace AppBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AppBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
并尝试了AppBundle\Controller\Pages
课程:
1.在不延伸FOS\UserBundle\Controller\RegistrationController
;
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @author pcmagas
* Class that loads miscellanous pages
*/
class PagesController extends Controller
{
/**
*@Route("/", name="index")
*@Method("GET")
*/
function homePage()
{
$form = $this->get('fos_user.registration.form');
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
}
2.扩展FOS\UserBundle\Controller\RegistrationController
并尝试呈现表单:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
/**
* @author pcmagas
* Class that loads miscellanous pages
*/
class PagesController extends BaseController
{
/**
*@Route("/", name="index")
*@Method("GET")
*/
function homePage()
{
$form = $this->get('fos_user.registration.form');
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
}
这两种方法都无法呈现表单(只需渲染它,记住/register
路由将在通过ajax提交时处理表单。)并返回以下错误消息:
您已请求不存在的服务“fos_user.registration.form”。你的意思是其中一个:“fos_user.registration.form.factory”,“fos_user.registration.form.type”?
你有什么想法怎么做?
我试过了:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
/**
* @author pcmagas
* Class that loads miscellanous pages
*/
class PagesController extends BaseController
{
/**
*@Route("/", name="index")
*@Method("GET")
*/
function homePage()
{
$form = $this->get('fos_user.registration.form.type');
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
}
有错误:
尝试调用类“FOS \ UserBundle \ Form \ Type \ RegistrationFormType”的名为“createView”的未定义方法。
同样的结果:
尝试调用类“FOS \ UserBundle \ Form \ Factory \ FormFactory”的名为“createView”的未定义方法。
答案 0 :(得分:1)
最后这对我有用:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @author pcmagas
* Class that loads miscellanous pages
*/
class PagesController extends Controller
{
/**
*@Route("/", name="index")
*@Method("GET")
*/
function homePage()
{
$form = $this->get('fos_user.registration.form.factory');
$form = $form->createForm();
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
}