2012-01-05 128 views
0

正當我想我已經得到了這個框架.... SEEMS喜歡它的應該是如此簡單的東西是挫敗我的生活!Symfony 1.4自定義表格

這是我得到了什麼:

PageMeta: 
    connection: doctrine 
    actAs: { Timestampable: ~ } 
    tableName: page_meta 
    columns: 
    id: 
     type: integer(4) 
     primary: true 
     autoincrement: true 
    site_id: 
     type: integer(4) 
     notnull: true 
    meta_type_id: 
     type: integer(4) 
     notnull: true 
    page_name_id: 
     type: integer(4) 
     notnull: true 
    value: 
     type: string(65535) 
     default: '' 
     notnull: true 

的關係ID的在所有情況下都只是ID |名稱表並不重要。我正在填補這些很好,我需要的是這個。

我想創建一個窗體與每個page_name的嵌入式窗體(目前有9個)。 所以我創建了一個自定義窗體

class MagicForm extends BaseForm 
{ 
    public function configure() 
    { 
    CODE TO GET ALL MY NEEDED VARIABLE and MODELS 
    $forms = new sfForm(); 
     $x = 0; 

     if(count($pageMetas) < 1) 
     { 
     foreach($pages as $page) 
     { 
      $pageMeta = new PageMeta(); 
      $pageMeta->PageName = $page; 
      $pageMeta->setMetaTypeId(1); 
      $pageMeta->setSiteId($sid); 
      $pageMetas[] = $pageMeta; 
     } 
     } 

     foreach($pageMetas as $meta) 
     { 
     $metaForm = new PageMetaForm($meta); 
     $metaForm->widgetSchema['value']->setLabel($meta->PageName->getName()); 
     $metaForm->setDefault('value', $meta->getValue()); 
     $metaForm->widgetSchema['page_name_id'] = new sfWidgetFormInputHidden(); 
     $forms->embedForm($x,$metaForm); 
     $x++; 
     } 

     $this->embedForm('TitleTags',$forms); 
    } 
    } 

這工作得很好,我打開我的形式,我得到所需的9個表格與字段值來填充所有準備。

這是我的問題所在,我無法讓他們保存!我試着通過綁定表單並保存它來處理它們,我得到了crsf_token錯誤,以及其他問題。

我試過只是簡單地抓住帖子值並創建一個新的PageMeta模型,並簡單地保存它。

i.e. 
    $pageMeta = new PageMeta(); 
    $pageMeta->setXXX($request->getPostParamater(XXX); 
    etc; 

但初始保存後,我得到重複。是的,我通過了Id,是的,我甚至嘗試了整個做。 當它不是一個新的價值,這給了我一個錯誤: 未知記錄屬性/相關成分「新」的「PageMeta」 不過,我可以comfirm PageMeta確實是一個PageMeta對象....

不管怎樣,在最後,我希望將多個(非動態的,我知道我需要多少)同一個表單放到一個頁面中,然後一次保存它們。

謝謝你閱讀..現在...去!

回答

1

形式在symfony中不是那麼好。對我來說,聽起來crsf_token問題伴隨着模板中的oder id名稱。

例如你的lib/form /(/ ?pagemeta.php /)=> $ this-> wigetSchema ....很重要!

public function configure() { 
    $this->setWidgets(array(
     'firstname' => new sfWidgetFormInputText(array(), array('size' => '40', maxlength' => '100')), 
)); 

$this->widgetSchema->setNameFormat('pagemeta[%s]'); 
} 

模板Success.php:

<?php include_partial('global/standardform',array('form' => $formPageMeta, 'formTarget' => $formTargetPageMeta)) ?> 

,並在您action.calls

$this->formPageMeta = new PageMetaForm(array(
       'firstname' => $this->endkunde->getFirstname(), 
)); 

$this->formTargetPageMeta = 'test/index'; //module/action 


    if ($request->isMethod('post')) { 
     $this->formPageMeta->bind($request->getParameter('pagemeta')); //getParameter is from the action module/action 

     if ($this->formPageMeta->isValid()) { 
      $formData = $this->formPageMeta->getValues(); 
      $metaForm->widgetSchema['value']->setLabel($meta->PageName->getName()); 
     } 
    } 

但我討厭形式太多,但我想這就是問題所在,你沒有設置widgetSchema。 希望我沒有犯錯!

Craphunter

+0

也許我提出這個太複雜了。我們只回答這個問題。 假設我有一個名爲test的表單類,並且我想將2個主義表單(即綁定到db表的表單)嵌入到此表單中,但表單本身(Test是)除2嵌入外沒有任何內容形式。 在測試類中,我只需要執行$ this-> embedForm('form1',new dForm1());和$ this-> embedForm('form2',new dForm2()); 這將使我的2個表單進入測試狀態,但是如何在將這些表單加載到模板後保存這些表單? – Zjoia 2012-01-06 07:27:24

+0

當我說得對。這你會在行動中做。爲每個db和$ db-> save()&$ db2-> save();進行查詢。當你有一個好的數據庫模型時,你可以用查詢來完成。但它有點複雜。 – craphunter 2012-01-06 08:23:14