yii2.0的学习之旅(二)
前言:上一次我们简单认识了一下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的学习之旅(二)的更多相关文章
- yii2.0的学习之旅(一)
一. 通过composer安装yii2.0项目 *本文是根据您已经安装了composer (1)跳转到项目根目录 cd /xxxx/www (2)下载插件 composer global requir ...
- 滴滴Booster移动APP质量优化框架 学习之旅 二
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 续写滴滴Booster移动APP质量优化框架学习之旅,上篇文章分 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- artDialog学习之旅(二)之扩展方法详解
名称 描述 核心方法 art.dialog.top 获取artDialog可用最高层window对象.这与直接使用window.top不同,它能排除artDialog对象不存在已经或者顶层页面为框架集 ...
- 我的AngularJS 学习之旅(二)
记得某位大神说过,"时间就像海绵里的水,挤挤总是有的.".大多时候,与其说我是很忙而没时间去做自己想做的事, 倒不如说是懒得去做罢了. 废话不多说,接前一篇继续吧 3.3 指令(D ...
- [moka同学笔记]Yii2.0 dropDownList的使用(二)
方法一: <?php $psObjs = Poststatus::find()->all(); $allStatus = ArrayHelper::map($psObjs,'id','na ...
- [原创] zabbix学习之旅二:yum安装
对于允许连接公网的环境下,显然通过yum安装是最为简单方便的,也是官网推荐的安装方式.通过这种方式安装,会将php.apache.zabbix本身都一并安装,解决了烦人的依赖包问题. 本文将介绍如 ...
- 从0开始学习react(二)
今天,开始学习第二节!!! 工欲善其事,必先利其器 react推荐我们使用webpack来打包文件,那么我们就用吧!(其实真心不想用啊) 至于好处网上写的天花乱坠的,大家自行解决啊... 这节主要就学 ...
- yii2源码学习笔记(十二)
继续了解controller基类. /** * Runs a request specified in terms of a route.在路径中指定的请求. * The route can be e ...
随机推荐
- Java的23种设计模式,详细讲解(一)
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- springBoot 集成Mysql数据库
springBoot 集成Mysql数据库 前一段时间,我们大体介绍过SpringBoot,想必大家还有依稀的印象.我们先来回顾一下:SpringBoot是目前java世界最流行的一个企业级解决方案框 ...
- XAF中多对多关系 (XPO)
In this lesson, you will learn how to set relationships between business objects. For this purpose, ...
- netcore中使用grpc
简介 grpc是由google公司开发的一个高性能.开源和通用的RPC框架,采用HTTP/2通信. 1.gRPC的传输使用http/2支持双向流. 2.支持多语言,例如java.go.php.net. ...
- linux环境下安装selenium+chrom+chromdriver.exe
原文:https://blog.csdn.net/yoyocat915/article/details/80580066 原文:https://blog.csdn.net/hanxue6898/art ...
- Django2.0中基于正则表达式的路由机制(一)
1. 在urls.py的文件中导入操作正则表达式的方法:(新版的Django是使用path方法对URL进行路由分配) from django.contrib import admin from dj ...
- July 13th, 2018. Friday, Week 28th.
Don't let the mistakes and disappointments of the past control and direct your future. 不要让你的未来被过去的错误 ...
- itest(爱测试) 4.2.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票 去投票 v4.2.0下载地址 :itest下载 itest 简介:查看简介 itest ...
- JAVA基础复习(重点)
一. 初识Java编程 1. Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2.实现第一个hello world public cl ...
- canopy聚类算法的MATLAB程序
canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...