前言:上一次我们简单认识了一下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. centos 7 搭建Samba

    一.Samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成. SMB(Server Message Block的缩写,即服务器消息块)主要是作 ...

  2. java核心技术第四篇之JDBC第二篇

    01.JDBC连接池_连接池的概念: 1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率.这时我们可以创建一个"容器", 这个容器中, ...

  3. 1G内存VPS安装 mysql5.6 经常挂

    背景介绍 去年3月份的时候参加了腾讯云主机活动,5年362,非常优惠.当时的想法是买来可以瞎整一波,虽然配置不高,但是搞点事情也够用. 配置如下,上海机房 1 核 1 GB 1 Mbps 系统盘:普通 ...

  4. JS基础语法---数组案例---9个练习

    练习1:求数组中所有元素的和 var arr1 = [10, 20, 30, 40, 50]; var sum = 0; for (var i = 0; i < arr1.length; i++ ...

  5. 【JavaWeb】实现二级联动菜单

    实现效果 频道信息 package demo; public class Channel { private String code; //频道编码 private String name; //频道 ...

  6. js 常用工具方法

    1.格式化字符串 String.prototype.format = function () { let args = arguments; return this.replace(/\{(\d+)\ ...

  7. Linux根目录下各目录含义

    /boot:系统启动的相关文件,比如内核,grub /etc:配置文件 /dev:设备文件 /root:root用户的家目录 /home:用户家目录 /lib:库文件 /bin:用户的命令文件 /sb ...

  8. nginx location 配置详解

    指令作用 匹配指定的请求uri(请求uri不包含查询字符串,如http://localhost:8080/test?id=10,请求uri是/test) 语法形式 location [ = | ~ | ...

  9. springboot + shiro + mysql + mybatis 工程快速搭建

    1. 新建 springboot 工程 2. 随便起个名字 3. 初始化工程 4. 导入 shiro 和 thymeleaf 依赖 <!-- thymeleaf依赖 --> <dep ...

  10. B/S架构与C/S架构(略讲)

    B/S架构基本概念 B/S是Browser/Server,即浏览器/服务器架构.Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现. B/S三层体系结构可以定义为 ...