2016-11-24 73 views
3

我有兩個捆綁:
MainBundle:誰有我的網站的不同部分。
SecondBundle與形式編碼不同的優惠(此優惠套裝)調用一個遺產控制器的形式

我的問題是,我想打電話給我的報價形式控制器我MainBundle我的主頁樹枝。

我沒有問題來調用窗體,但我的窗體的數據不保存在我的數據庫中。另一方面,如果我把我的表格放在我的主控制器中,我沒有問題,它可以正確保存所有的數據。

形式樹枝代碼:

{{ 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() 
     )); 
    } 
} 

我的主控制器:

class DefaultController extends Controller 
{ 
    public function indexAction(Request $request) 
    { 
     return $this->render('DellexisMainBundle:Home:index.html.twig'); 
    } 
} 

的routing.yml

dellexis_offer: 
    resource: "@DellexisOfferBundle/Resources/config/routing.xml" 
    prefix: /offer 

dellexis_main: 
    resource: "@DellexisMainBundle/Resources/config/routing.xml" 
    prefix: /

OfferBundle routing.xml

<?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> 

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_main_homepage" path="/"> 
     <default key="_controller">DellexisMainBundle:Default:index</default> 
    </route> 
</routes> 

編輯:

隨着我OfferController的要求,我DefaultController(主束)的轉儲的轉儲,POST方法是在DefaultController,在OfferController停留在一個GET方法。

編輯2:解決的辦法:

我finaly找到解決方案。由於第二個控制器沒有與第一個控制器相同的請求。我想這是爲了向第二個控制器提出請求。而symfony的魔法就是要這樣做!

因此,如果有人有同樣的問題,只是轉發這樣的請求:

public function indexAction(Request $request) 
    { 
     $this->forward('DellexisOfferBundle:Offer:index', array(
      'request' => $request 
     )); 

     return $this->render('DellexisMainBundle:Home:index.html.twig'); 
    } 
+0

能你發佈你的路由配置文件?看起來'DefaultController'對你的代碼沒有附加價值,或者你對每個Bundle有不同的路由配置。 – inaliahgle

+0

我已編輯帖子 –

+0

我更新了答案! – inaliahgle

回答

1

首先,你應該有不同的路線後綴,因爲你用的兩束相同的一個(\) ,女巫是個壞主意。您可以爲offerBundle路由配置(\offer)添加後綴。

另外,在路由中。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() 
    )); 
    } 


} 
+0

我嘗試了你說的話,但沒有任何改變。但是使用$ form-> isValid(),如果表單中沒有數據,它就不會保存任何數據,因此GET和POST方法之間已經有了驗證否?我在控制器中放置了轉儲,以查看offer變量是否具有POST的值,但該變量仍具有空值。所以我認爲它沒有檢測到POST方法 –

+0

隨着我的OfferController請求的轉儲和DefaultController(Main Bundle)的轉儲,POST方法在DefaultController上,OfferController停留在GET方法上。 –

+0

@ThomasClermont是否適合你? – inaliahgle

相關問題