Symfony 1.4自定义表格

Symfony 1.4自定义表格

问题描述:

正当我想我已经得到了这个框架.... 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对象....

不管怎样,在最后,我希望将多个(非动态的,我知道我需要多少)同一个表单放到一个页面中,然后一次保存它们。

谢谢你阅读..现在...去!

形式在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