为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 $model->validate()验证不通过?我把这个屏蔽掉就可以提交了

$model->setScenario(PostForm::SCENARIOS_CREATE);

if ($model->load(Yii::$app->request->post()/* && $model->validate()*/)) {


if (!$model->create()) {

Yii::$app->session->setFlash('warning',$model->_lastError);

echo $model->_lastError;

}else{

return $this->redirect(['post/view','id'=>$model->id]);

}

}


正在回答

3 回答


PostController.php

public function actionCreate(){

$model=new PostForm;


//定义场景

$model->setScenario(PostForm::SCENARIOS_CREATE);

if ($model->load(Yii::$app->request->post()) && $model->validate() ) {


if (!$model->create()) {

Yii::$app->session->setFlash('warning',$model->_lastError);

echo $model->_lastError;

}else{

return $this->redirect(['post/view','id'=>$model->id]);

}

}else{


$cat=CatModel::getAllCats();

return $this->render('create',['model'=>$model,'cat'=>$cat]);

}

}


1 回复 有任何疑惑可以回复我~

<?php

namespace frontend\models;

use Yii;

use yii\base\Model;

use common\models\PostsModel;


use yii\base\Object;

//文章表单模型

class PostForm extends Model{

public $id;

public $title;

public $content;

public $label_img;

public $cat_id;

public $tags;


public $_lastError='';


/*定义场景*/

const SCENARIOS_CREATE='create';

const SCENARIOS_UPDATE='update';

//场景设置

public function scenarios(){

$scenarios=[

self::SCENARIOS_CREATE=>['title','content','label_img','cat_id','tags'],

self::SCENARIOS_UPDATE=>['title','content','label_img','cat_id','tags'],


];

return  array_merge(parent::scenarios(),$scenarios);

}


public function rules(){

return [

[['id','title','cat_id'],'required'],

[['id','cat_id'],'integer'],

['title','string','min'=>4,'max'=>50],

];

}

public function attributeLabels(){

return [

'id'=>'编码',

'title'=>'标题',

'content'=>'内容',

'label_img'=>'标签图',

'tags'=>'标签',

'cat_id'=>'分类',

];

}

//添加文章 在表单模型内使用

public function create(){

//事物启用

$transaction=Yii::$app->db->beginTransaction();

try{

$model=new PostsModel();

$model->setAttributes($this->attributes);

$model->summary=$this->_getSummary();//调用另外的方法,截取简介

$model->user_id=Yii::$app->user->identity->id;

$model->user_name=Yii::$app->user->identity->username;

$model->is_valid=PostsModel::IS_VALID;

$model->created_at=time();

$model->updated_at=time();


if (!$model->save()) {

throw new \Exception('文章保存失败');

}

$this->id=$model->id;



//调用事件

$this->_eventAfterCreate();

$transaction->commit();


return true;

}catch(\Exception $e){

$transaction->rollBack();

$this->_lastError=$e->getMessage();

return false;

}

}

//获取简介 方法

public function _getSummary($s=0,$e=90,$char='utf-8'){

if (empty($this->content)) {

return null;

}

return (mb_substr(str_replace('&nbsp;','',strip_tags($this->content)),$s,$e,$char));

}


//创建成功调用事件

public function _eventAfterCreate(){


}





}


1 回复 有任何疑惑可以回复我~

知道原因了,括号位置错了,,还可以这样,找了一个小时了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP之Yii2框架搭建完整博客系统
  • 参与学习       22579    人
  • 解答问题       291    个

Yii是PHP快速开发的最佳实践之一,一起领略yii2快速开发的风采

进入课程

为什么 $model->validate()验证不通过?我把这个屏蔽掉就可以提交了

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号