2015-06-26 09:20:26 6577次浏览 1条回答 0 悬赏 1 金钱

我想在项目里面使用一个自定义的表单结构, 同时做一些表单验证, 希望能够用到Yii里面自带的一些验证功能, 这个方式怎么去做啊?
新手一枚, 望大家多多指教, 谢谢.

最佳答案

  • lilongsy 发布于 2015-06-26 09:48 举报

    自定义一个模型,然后在这个模型里设置rules,会自动生成表单验证。
    例如:

    class ContactForm extends Model
    {
        public $name;
        public $email;
        public $subject;
        public $body;
        public $verifyCode;
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                // name, email, subject and body are required
                [['name', 'email', 'subject', 'body'], 'required'],
                // email has to be a valid email address
                ['email', 'email'],
                // verifyCode needs to be entered correctly
                ['verifyCode', 'captcha'],
            ];
        }
    
    7 条回复
    回复于 2015-06-26 11:17 回复

    感谢你的回答, 我现在是这样做了, 但是为何在 执行 $model->load(Yii::$app->request->post()) 的时候 不能正确的载入里面对应的属性呢?
    下面是我控制器表单部分的代码

    public function actionPost(){
        if (Yii::$app->request->getIsGet()) {
            $jobs = $this->getJobs();
            $edulevels = $this->edulevel;
            return $this->render('post', compact('jobs', 'edulevels'));
        }
    
        if (Yii::$app->request->getIsPost()) {
            $model = new PositionForm();
            if ($model->load(Yii::$app->request->post('PositionForm')) && $model->validate()) {
                echo 'success!';
            } else {
                //echo 'error';
                var_dump(Yii::$app->request->post());
                var_dump($model);
            }
        }
    
    }
    
    回复于 2015-06-26 11:43 回复

    views是怎么写的呢?
    views里最好是使用model自动生成,避免手误。

    <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
    <?= $form->field($model, 'name') ?>
    <?= $form->field($model, 'email') ?>
    <?= $form->field($model, 'subject') ?>
    <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
    
    回复于 2015-06-26 13:34 回复


    可以了, views里面的字段名称必须以数组形式才可以, 这是我在views里面的代码

    <tr>
                                    <td><label class="control-label" for="name">职位名称</label></td>
                                    <td width="10"><span class="redstar">*</span></td>
                                    <td>
                                        <input type="text" class="form-control input-lg" id="name" name="PositionForm[name]" value="" placeholder="请输入职位名称,如:产品经理">
                                    </td>
                                </tr>
    
    回复于 2015-06-26 14:03 回复

    Yii2会自动生成一个防止csrf攻击的隐藏验证。

    回复于 2015-06-26 15:33 回复

    恩, 是只要使用ActiveForm来创建表单就可以了吧?

    回复于 2015-06-26 16:26 回复

    继承Model或ActiveRecord都可以。

    回复于 2015-12-23 11:49 回复

    我没有对应的表,就是无模型的表单,想使用yii自带的验证用这种方式可以么,

    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
猫学乖
主管

猫学乖

注册时间:2015-06-26
最后登录:2016-06-14
在线时长:9小时44分
  • 粉丝3
  • 金钱223
  • 威望20
  • 积分513

热门问题