【问题标题】:Form element validation in Phalcon framework (check if element exists)Phalcon 框架中的表单元素验证(检查元素是否存在)
【发布时间】:2015-07-05 19:32:47
【问题描述】:

我是 Phalcon 框架的初学者,我必须验证 .volt 页面中的表单元素

我有一个表单类文件,我在其中编写隐藏文件以进行记录编辑,当它处于编辑模式时,我将记录的 id 存储在隐藏文件中

if ($options["edit"] == 1) {
       // $tax_categories_id = new Hidden("tax_categories_id");
        $this->add(new Hidden('tax_categories_id'));
        //$this->add($tax_categories_id); 
    }  

问题是当我在add.volt 中渲染这个隐藏文件时

 {{ form.render('tax_categories_id')}} 

它在编辑模式下工作正常,但在新记录时间它给出错误

Phalcon\Forms\Exception:ID=tax_categories_id 的元素不是表单的一部分

我知道为什么会出现错误,但我无法在 .volt 文件中验证此字段

【问题讨论】:

    标签: php forms validation phalcon


    【解决方案1】:

    您可以在控制器中设置 $options 变量,然后在视图中检查它吗?

    //controller.php
    $this->view->setVar('options', $options);
    
    
    //view.volt
    {% if options['edit'] %}
        {{ form.render('tax_categories_id')}} 
    {% endif %]
    

    【讨论】:

      【解决方案2】:

      假设您的包装箱接近于:

      <?php
      
      use Phalcon\Forms\Form,
          Phalcon\Forms\Element\Text,
          Phalcon\Forms\Element\Hidden;
      
      class UsersForm extends Form
      {
          public function initialize($options = [])
          {
              if ( isset($options['edit']) && $options['edit'] ) {
                  $this->add(new Hidden('id'));
              }
      
              $this->add(new Text('name'));
          }
      }
      

      所以!根据选项,您可能声明了一个字段,也可能声明了两个。现在,当有人向您发回此表单时,您必须使用正确的$options['edit'] 重新设置它,具体取决于您是否声明了$_REQUEST['id']

      $form = null;
      if( isset($_REQUEST['id']) ) {
          $form = new UsersForm();
      } else {
          $form = new UsersForm(['edit' => true]);
      }
      
      $form->bind($_REQUEST);
      if($form->isValid()) {
          //...
      }
      

      here 是一本相当高级(但还是有一些差距)的手册。打赌你已经在那里了,但以防万一。

      顺便说一句,表单是迭代器和可遍历的,因此您可以循环它们以仅呈现已声明的元素。写这个是因为你以{{ form.render('tax_categories_id')}} 为例,这让我觉得你是在手动生成字段。

      【讨论】:

        【解决方案3】:

        只要检查元素是否存在

        // add.volt
        {% if form.has('tax_categories_id') %}
            {{ form.render('tax_categories_id') }}
        {% endif %}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-17
          • 2012-11-20
          相关资源
          最近更新 更多