前言:上一次我们简单认识了一下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 yii\data\Pagination;    //分页类
    /**
* 根据条件查询多条数据
* @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 yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\LinkPager; //引用分页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 yii\helpers\Html;
use yii\widgets\ActiveForm;
$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 yii\helpers\Html;
use yii\widgets\ActiveForm;
$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

yii2.0的学习之旅(二)的更多相关文章

  1. yii2.0的学习之旅(一)

    一. 通过composer安装yii2.0项目 *本文是根据您已经安装了composer (1)跳转到项目根目录 cd /xxxx/www (2)下载插件 composer global requir ...

  2. 滴滴Booster移动APP质量优化框架 学习之旅 二

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 续写滴滴Booster移动APP质量优化框架学习之旅,上篇文章分 ...

  3. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  4. artDialog学习之旅(二)之扩展方法详解

    名称 描述 核心方法 art.dialog.top 获取artDialog可用最高层window对象.这与直接使用window.top不同,它能排除artDialog对象不存在已经或者顶层页面为框架集 ...

  5. 我的AngularJS 学习之旅(二)

    记得某位大神说过,"时间就像海绵里的水,挤挤总是有的.".大多时候,与其说我是很忙而没时间去做自己想做的事, 倒不如说是懒得去做罢了. 废话不多说,接前一篇继续吧 3.3 指令(D ...

  6. [moka同学笔记]Yii2.0 dropDownList的使用(二)

    方法一: <?php $psObjs = Poststatus::find()->all(); $allStatus = ArrayHelper::map($psObjs,'id','na ...

  7. [原创] zabbix学习之旅二:yum安装

    对于允许连接公网的环境下,显然通过yum安装是最为简单方便的,也是官网推荐的安装方式.通过这种方式安装,会将php.apache.zabbix本身都一并安装,解决了烦人的依赖包问题.   本文将介绍如 ...

  8. 从0开始学习react(二)

    今天,开始学习第二节!!! 工欲善其事,必先利其器 react推荐我们使用webpack来打包文件,那么我们就用吧!(其实真心不想用啊) 至于好处网上写的天花乱坠的,大家自行解决啊... 这节主要就学 ...

  9. yii2源码学习笔记(十二)

    继续了解controller基类. /** * Runs a request specified in terms of a route.在路径中指定的请求. * The route can be e ...

随机推荐

  1. Java开发桌面程序学习(13)——Javafx多线程 下载功能

    普通使用 Task<Void> task = new Task<Void>() { @Override protected void succeeded() { super.s ...

  2. MVC教程:MVC区域路由

    一.区域路由 为了管理网站中大量的文件,在ASP.NET MVC 2.0版本中引入了一个新概念:区域(Area). 有了区域以后,可以让我们的项目不至于太复杂而导致管理混乱.每个模块的页面都放入相应的 ...

  3. Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用

    1.java中与数据库相关的时间类 java提供与mysql方便交互的三种数据类型: java.sql.Date java.sql.Time java.sql.Timestamp 它们都是继承java ...

  4. vuejs之路由应用之二

    现在我们开始一个应用: 一个应用中包含4个组件,我们暂且可以想象是4个页面,首先是App.vue,App.vue中又包含3个子组件:About.vue,Home.vue,Document.vue Ap ...

  5. java中字符串String、StringBuilder、StringBuffer的常用方法

    String的常用方法: public static void main(String[] args) { String str = "Hello world!"; // 获取字符 ...

  6. 分布式系统ID的几种生成办法

    前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给 ...

  7. 7.2 Spark Streaming

    一.Spark Streaming设计 Spark Streaming可整合多种输入数据源,如Kafka.Flume.HDFS,甚至是普通的TCP套接字.经处理后的数据可存储至文件系统.数据库,或显示 ...

  8. python的pip安装时,使用国内Pypi源

    有时,国外的网速确实不理想. 想安装python库,还是国内快点. 参考URL: http://www.mamicode.com/info-detail-2248964.html 阿里云 http:/ ...

  9. 【bzoj3601】一个人的数论(莫比乌斯反演+拉格朗日插值)

    传送门 题意: 求\[ \sum_{i=1}^{n}i^d[gcd(i,n)=1] \] 思路: 我们对上面的式子进行变换,有: \[ \begin{aligned} &\sum_{i=1}^ ...

  10. C++中的异常处理(中)

    为什么要在catch中重新抛出异常? #include <iostream> #include <string> using namespace std; void Demo( ...