我有两个捆绑包:
MainBundle :谁拥有我网站的不同部分
SecondBundle ,带有可编码不同优惠的表单。(优惠套装)
我的问题是我想在MainBundle的主页面中调用我的商品表单控制器。
调用表单没有问题,但我的表单数据不会保存在我的数据库中。另一方面,如果我将表单放在主控制器中,我没有问题,它可以正确保存所有数据。
表格树枝代码:
$result = json_decode($yourJsonString);
foreach ($result->Appointments as $appointment) {
echo $appointment->file_name;
}
我的主页摘要:
{{ form_start(form,{'attr': {'id': 'FootForm'}}) }}
<div class="field-warper">
{{ form_label(form.titre, "Titre") }}
{{ form_widget(form.titre,{'attr': {'placeholder': 'Titre'}}) }}
</div>
<div class="field-warper">
{{ form_label(form.contenu, "Contenu") }}
{{ form_widget(form.contenu,{'attr': {'placeholder': 'Contenu'}}) }}
</div>
<div class="field-warper">
{{ form_label(form.price, "Price") }}
{{ form_widget(form.price,{'attr': {'placeholder': 'Price'}}) }}
</div>
<div class="field-warper submit-warper">
{{ form_widget(form.send,{'attr':{'class':'submit'}}) }}
</div>
{{ form_end(form) }}
我的商品控制器(表单控制器):
{% extends "DellexisMainBundle:Common:base.html.twig" %}
{% block body %}
<div>
<p>i'm the Body</p>
{% block formu %}
{{ render(controller('DellexisOfferBundle:Offer:index')) }}
{% endblock %}
</div>
{% endblock %}
我的主控制器:
class OfferController extends Controller
{
public function indexAction(Request $request)
{
$entity_manager = $this->getDoctrine()->getManager();
$offer=new Offer();
$form = $this->get('form.factory')->createBuilder('form', $offer)
->add('titre','text')
->add('contenu','textarea')
->add('price','text')
->add('send', 'submit')
->getForm();
// on joint la requete Post à notre classe
$form->handleRequest($request);
if($form->isValid()) {
$entity_manager->persist($offer);
$entity_manager->flush();
}
return $this->render('DellexisOfferBundle:Default:index.html.twig', array(
'form' => $form->createView()
));
}
}
的routing.yml
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
return $this->render('DellexisMainBundle:Home:index.html.twig');
}
}
OfferBundle routing.xml
dellexis_offer:
resource: "@DellexisOfferBundle/Resources/config/routing.xml"
prefix: /offer
dellexis_main:
resource: "@DellexisMainBundle/Resources/config/routing.xml"
prefix: /
MainBundle routing.yml
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
<route id="dellexis_offer_homepage" path="/offer">
<default key="_controller">DellexisOfferBundle:Default:index</default>
</route>
</routes>
编辑:
通过转发我的OfferController请求和转储我的DefaultController(主捆绑包),POST方法在DefaultController上,OfferController保留在GET方法上。
编辑2:解决方案:
我最终找到了解决方案。由于第二个控制器没有与第一个控制器相同的请求。我想将请求转发给第二个控制器。 symfony的魔力想要有效!
因此,如果有人遇到同样的问题,请转发请求:
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
<route id="dellexis_main_homepage" path="/">
<default key="_controller">DellexisMainBundle:Default:index</default>
</route>
</routes>
答案 0 :(得分:1)
首先,你应该有不同的路由后缀,因为你在两个Bundles中使用相同的路由(\
),这是个坏主意。您可以在offerBundle路由配置(\offer
)中添加后缀。
另外,在routing.yml中,您没有加载offerBundle路由配置文件。
而且,通过查看你的控制器,没有什么可以保存的。
indexAction显示页面并保存一个空对象new Offer()
。
您必须区分POST请求(当您提交数据时)和GET请求(当您想要显示表单时)
你的代码应该是这样的:
class OfferController extends Controller
{
public function indexAction(Request $request) {
$entity_manager = $this->getDoctrine()->getManager();
$offer=new Offer();
$form = $this->get('form.factory')->createBuilder('form', $offer)
->add('titre','text')
->add('contenu','textarea')
->add('price','text')
->add('send', 'submit')
->getForm();
// on joint la requete Post à notre classe
$form->handleRequest($request);
if($request->isMethod('POST') && $form->isValid()) {
$entity_manager->persist($offer);
$entity_manager->flush();
}
return $this->render('DellexisOfferBundle:Default:index.html.twig', array(
'form' => $form->createView()
));
}
}