前言:上一次我们简单认识了一下yii2.0安装,模型基本(增,删,改,查)操作
一、前后台数据交互
*如果你觉得默认的top样式太丑,可以这样关掉*
*底部也可以这样关掉*
(1)mvc合作操作数据
控制器(c),显示方法与接收方法
/** * 列表 * @return string */ public function actionIndex(){ $where = array(); $is_page = false; FcArticle::getConditionByList('a_id,article_title,author',$where,'a_id desc',$is_page,10); return $this->render('index', [ 'list' => FcArticle::$countries, 'pagination' => FcArticle::$pagination, 'is_page'=>$is_page ]); } /** * 添加 * @return string */ public function actionAdd() { $model = new FcArticle(); //是否通过验证,接受数据 if ($model->load(Yii::$app->request->post()) && $model->validate()) { // 在model里面编辑好规则,通过之后,操作数据入库 $model->insert(); return $this->redirect('index.php?r=test/index'); } else { return $this->render('add', [ 'model' => $model, ]); } } /** * 编辑 * @return string */ public function actionUpdate() { //是否通过验证,接受数据 if(Yii::$app->request->isGet){ $a_id = Yii::$app->request->get('a_id'); // Yii::$app->request->queryParams; //get请求方式,多维数组 }else if(Yii::$app->request->isPost){ $postParams = Yii::$app->request->bodyParams; //post请求方式,多维数组 $a_id = $postParams['FcArticle']['a_id']; } $model = FcArticle::findOne(array('a_id'=>$a_id)); if ($model->load(Yii::$app->request->post()) && $model->validate()) { // 在model里面编辑好规则,通过之后,操作数据入库 // https://www.jianshu.com/p/4d5a3a8256d3 附上网址,这里有怎么去掉index.php的方法 $model->update(); return $this->redirect('index.php?r=test/index'); } else { return $this->render('update', [ 'model' => $model, 'a_id'=>$a_id ]); } }
模型(m),自己在原来的基础上封装了一下
框架分页要引用一个文件
use yiidataPagination; //分页类
/** * 根据条件查询多条数据 * @param string $field 字段 * @param array $condition 条件 * @param string $order 排序 * @param bool $page 是否有分页 * @param int $pagesize 页数 */ public static function getConditionByList($field = '',$condition = array(),$order = 'a_id desc',$page = false,$pagesize = 10) { $query=self::find(); if($page){ self::$pagination = new Pagination([ 'defaultPageSize' => $pagesize,//每页显示条数 'totalCount' => self::getConditionCount($condition),//总条数 ]);//分页传参 if(isset($field) && $field!=''){ $query->select($field); } self::$countries = $query ->where($condition) ->orderBy($order) ->offset(self::$pagination->offset)//偏移量 ->limit(self::$pagination->limit) ->all();//查询到的分页后的数据 }else{ if(isset($field) && $field!=''){ $query->select($field); } self::$countries = $query ->where($condition) ->orderBy($order) ->all();//查询到的分页后的数据 } } /** * 根据条件获取总数 * @param array $condition * @return int|string */ public static function getConditionCount($condition = array()){ return self::find()->where($condition)->count(); } /** * 根据条件查询单条数据 * @param string $field * @param array $condition * @return FcArticle|array|null */ public function getOneConditionInfo($field = '',$condition = array()){ $query = self::find(); if(isset($field) && $field!=''){ $query->select($field); } return $query->where($condition)->one(); }
视图(v)渲染,这里用的都是yii2.0内置的form组件
index.php(列表)
<?php use yiihelpersHtml; use yiigridGridView; use yiiwidgetsLinkPager; //引用分页link ?> <style> .list{ width: 100%; } .list .l-l,.l-l-h{ width:100%; text-align: center; } .l-l-h{ font-weight: bold; } .list .l-v,.l-h{ border: 1px solid #0b72b8; display:inline-block; width: 150px; float:left; padding: 0px; margin: 0px; text-align: center; } .l-h{ font-weight: bold; } .clear{ clear:both} </style> <?= Html::a('添加', ['test/add'], ['class' => 'profile-link']) ?> <div class="list"> <div class="l-l-h"> <p class="l-h"> 标题 </p> <p class="l-h"> 作者 </p> <p class="l-h"> 操作 </p> <div class="clear"></div> </div> <?php foreach ($list as $key=>$value){?> <div class="l-l"> <p class="l-v"> <?= $value['article_title']?> </p> <p class="l-v"> <?= $value['author']?> </p> <p class="l-v"> <?= Html::a('编辑', ['test/update','a_id'=>$value['a_id']], ['class' => 'profile-link']) ?> </p> <div class="clear"></div> </div> <?php }?> <?php if($is_page){ // 是否有分页,有则显示,无则关闭 ?> <?= LinkPager::widget([ 'pagination'=>$pagination, //'options'=>['class'=>'hidden']//关闭自带分页 'firstPageLabel'=>"首页", 'prevPageLabel'=>'上一页', 'nextPageLabel'=>'下一页', 'lastPageLabel'=>'尾页', ]) ?> <?php }?> </div>
add.php(增加)
<?php use yiihelpersHtml; use yiiwidgetsActiveForm; $form = ActiveForm::begin(['action' => ['test/add'],'method'=>'post']); ?> <?= $form->field($model, 'article_title')->label('标题名') ?> <?= $form->field($model, 'author')->label('作者') ?> <?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?> <?php ActiveForm::end() ?>
update.php(编辑)
<?php use yiihelpersHtml; use yiiwidgetsActiveForm; $form = ActiveForm::begin(['action' => ['test/update'],'method'=>'post']); ?> <?= $form->field($model, 'article_title')->label('标题名') ?> <?= $form->field($model, 'author')->label('作者') ?> <?= $form->field($model, 'a_id')->hiddenInput(['value'=>$a_id]) ?> <?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?> <?php ActiveForm::end() ?>
yii2.0注意事项
1、控制器方法名必须是小驼峰方式;
例如:actionFormadd,错误:actionFormAdd(这种是访问不到的)
2、本来打算是用原生form标签,但是,发现不好兼容验证规则,所以做罢
相关网址
yii2表单验证方法:https://blog.csdn.net/song_csdn1550/article/details/51004815
yii2.0 Activeform表单部分组件使用方法:https://www.cnblogs.com/ymk0375/p/6285217.html
yii2.0 控制器方法 视图表单 Form表单处:https://www.cnblogs.com/jiufen/p/5086162.html