如何在PHP中使用Phalcon创建分步表单

Rewt0r

我目前正在使用Phalcon框架进行一个项目,该项目的页面具有复杂的表单和大量的输入,为了更好地分解它,我将表单分为一个逐步的过程。

在进行下一步之前,如何在每个步骤上验证表单,然后将整个表单保存到最后一步?

我似乎找不到任何有关此类过程的文档,因为如果我使用表单生成器,它喜欢完全验证表单。

卡米尔

很简单,只需在表单类中创建一个自定义方法以验证任何步骤,然后将某个步骤中的发布数据保存到消息类中,并通过“ stepX”将其存储到会话中,如果发布数据无效,则只需设置发布的默认值即可。有效时,将其保存到如上所述的会话中。

例如我的意思是“控制器”

<?php
class MyController extends BaseController {
     public function processStep1Action(){
           $form = new MyForm();
           if($this->request->isPost()){//im using my custom request class 
              if(!$form->isValid($this->request->getPost()){
                  //error messages goes here
                  $form->setDefaultsFromRequest($this->request); // it will set the filled data
              }
              else {
                  $messageClass = new MyMessageContainer();
                  $messageClass->setData($this->request);//inside parse requested data into message class, or parse it as $messageClass->name = $this->request->getPost('name');

                  $this->session->save('step1',$messageClass); //maybe it would be want to serialize it
                  //then redirect to the step 2 or x

              }
           }
     }
}

因此,在下一步中,您可以从会话$ this-> session-> get('step1');访问数据。因此,您可以在最后一步中加载所有发布的数据,并将其存储到数据库中。

我希望这有帮助!:)

这是我的表格,可能对您有帮助。

<?php 

namespace Manager\Library\Forms\User;

use Phalcon\Forms\Form,
    Phalcon\Forms\Element\Email,
    Phalcon\Forms\Element\Select,
    Phalcon\Forms\Element\Password,
    Phalcon\Forms\Element\Check,
    Phalcon\Validation\Validator\Confirmation,
    Phalcon\Validation\Validator\StringLength,
    Phalcon\Forms\Element\Submit,
    Phalcon\Validation\Validator\PresenceOf,
    Model\Group;

class AddUser extends Form {
    public function initialize()
    {
        $email = new Email('email');
        $email->addValidators(array(
            new \Phalcon\Validation\Validator\Email(array(
            'message' => 'Nezadali jste email nebo má nesprávny tvar([email protected]).'
            ))
        ));

                $this->add($email);

        $this->initGroupElement();

                $password = new Password('password');
        $password
            ->addValidator(new StringLength(array('min' => 6,'messageMinimum'   => 'Nezadali jste heslo nebo je příliš krátke, minimální počet znaků je 6.')))
            ->addValidator(new Confirmation(array('with'    => 'password-again',"message"   => "Zadané hesla se neshodují.")));
        $this->add($password);

        $repeatPassword = new Password('password-again');
        $this->add($repeatPassword);

                $this->initializeProfileElements();
                $active = new Check('active',array('value'  => 1));
                $this->add($active);
        $this->add( new Submit('save') );

                \Phalcon\Tag::setDefault('password', '');
                \Phalcon\Tag::setDefault('password-again', '');
    }

        public function initializeEdit(){
            $email = new Email('email');
        $email->addValidators(array(
            new \Phalcon\Validation\Validator\Email(array(
            'message' => 'Nezadali jste email nebo má nesprávny tvar([email protected]).'
            ))
        ));

                $this->add($email);

        $this->initGroupElement();

                $password = new Password('password');

        $this->add($password);

        $repeatPassword = new Password('password-again');
        $this->add($repeatPassword);

                $this->initializeProfileElements();
                $active = new Check('active',array('value' => 1));
                $this->add($active);
        $this->add( new Submit('save') );

                \Phalcon\Tag::setDefault('password', '');
                \Phalcon\Tag::setDefault('password-again', '');
        }

        protected function initGroupElement(){
            $auth = \Core\Auth::getIdentity();
            $groups = new Group();
//            $groups->addColumns(array('id','name'));
            //set global condition about Super Admin
            $groups->addFilter('id', 1,'<>');

            if($auth){
                //set restrictions for main groups
                if((int)$auth->group_id === 1){ //super admingroup
                    //no filter
                }
                else if((int)$auth->group_id === 2){ //admin group
                    $groups->addFilter('id', 1,'>');
                }
                else if((int)$auth->group_id === 6){//Provozovatel group
                    $groups->addFilter('id',array(3,6,7));
                    $groups->addFilter('public', 1,'=',true);
                }
                else { // other groups
                    $groups->addFilter('public', 1);
                }
            }

            $groups = $groups->findFiltered();
            $groupElement = new Select('group');
            foreach($groups as $group){
                $groupElement->addOption(array($group->id => $group->name));
            }

            $this->add($groupElement);

        }

        protected function initializeProfileElements(){
            $forename = new \Phalcon\Forms\Element\Text('forename');
            $this->add($forename);
            $surname = new \Phalcon\Forms\Element\Text('surname');
            $this->add($surname);
            $street = new \Phalcon\Forms\Element\Text('street');
            $this->add($street);
            $postal = new \Phalcon\Forms\Element\Text('postal');
            $this->add($postal);
            $city = new \Phalcon\Forms\Element\Text('city');
            $this->add($city);
            $ic = new \Phalcon\Forms\Element\Text('ic');
            $this->add($ic);
            $dic = new \Phalcon\Forms\Element\Text('dic');
            $this->add($dic);
        }

        public function setDefault($fieldName,$value){
            \Phalcon\Tag::setDefault($fieldName, $value);
        }

        public function setDefaults($object){
            if($object instanceof \Model\User){
                $this->setDefaultsFromObject($object);
            }
            else if($object instanceof \Phalcon\Http\Request){
                $this->setDefaultsFromRequest($object);
            }
        }

        protected function setDefaultsFromObject(\Model\User $user){
            $profile = $user->getRelated('\Model\Profile');   
            \Phalcon\Tag::setDefaults(array(
                'email'     => $user->email,
                'group'     => $user->group_id,
                'active'    => $user->active,
                'forename'  => $profile->forename,
                'surname'   => $profile->surname,
                'street'    => $profile->street,
                'city'      => $profile->city,
                'postal'    => $profile->postal,
                'ic'        => $profile->IC,
                'dic'       => $profile->DIC
            ));
        }

        protected function setDefaultsFromRequest(\Phalcon\Http\Request $request){
            \Phalcon\Tag::setDefaults(array(
                    'email'     => $request->getPost('email'),
                    'group'     => $request->getPost('group'),
                    'active'    => $request->getPost('active')
             ));

            \Phalcon\Tag::setDefaults(array(
                'forename'  => $request->getPost('forename'),
                'surname'   => $request->getPost('surname'),
                'street'    => $request->getPost('street'),
                'city'      => $request->getPost('city'),
                'postal'    => $request->getPost('postal'),
                'ic'        => $request->getPost('ic'),
                'dic'       => $request->getPost('dic')
            ));
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在PHP中使用phalcon变量?

如何在 Visual Studio 中使用邮件合并分步向导?

如何在Phalcon的查询中使用NOT BETWEEN?

如何在 Access 表单中使用代码创建命令按钮?

如何在AngularJS中使用表单创建下拉列表

如何在 Orbeon 中使用 REST API 创建表单定义?

如何在php中使用表单发布表格?

如何在表单提交中使用PHP函数进行操作?

如何在此联系表单中使用 OOP PHP?

你如何在php中使用ajax发布表单?

如何在Phalcon中使用QueryBuilder和Paginator进行缓存?

Tu如何在Phalcon框架中使用Recaptcha Google

如何在PHP中使用差异创建日期间隔

如何在 PHP 中使用键值对创建数组

如何在PHP中使用多个创建动态JSON数组?

如何在Wordpress Gravity Forms中使用PHP创建条目

如何在PHP中使用if多个语句创建变量并打印

如何在 PHP 中使用循环动态创建 html 表?

如何在Django表单中使用CSS?

如何在 html 表单中使用 parellex

如何在ListView Django中使用表单?

如何在 Django 表单中使用多选

如何在Rails中使用相同的表单在ruby中创建和编辑

如何在VueJS 2中使用相同的用户表单组件来创建和编辑用户?

如何在Django中使用单一表单创建用户和个人资料?

如何在Rails 4中使用简单的表单创建选择枚举属性

如何在flutter中使用下拉选择创建表单模式

如何在Reactjs中使用Apollo客户端创建更新表单

如何在APEX中使用多个提交按钮在一页中创建多个表单?