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 ...
随机推荐
- MySQL(8)---游标
Mysql(8)-游标 上一遍博客写了有关存储过程的语法知识 Mysql(7)---存储过程 游标或许你在工作中很少用到,但用不到不代表不去了解它,但你真正需要它来解决问题的时候,再花时间去学习很可能 ...
- go-爬虫-百度贴吧(并发版)
爬取百度贴吧的网页 非并发版 package main import ( "fmt" "io" "net/http" "os&qu ...
- java基础(7):自定义类、ArrayList集合
1. 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好 ...
- DataGridView中实现点击单元格Cell动态添加自定义控件
场景 鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以 添加下拉框为例 效果 注: 博客主页: https://blog.csdn.net/badao_liuman ...
- Discuz! 全局变量说明
$_G 保存了 Discuz! 中所有的预处理数据 缓存能够很好的提高程序的性能,一些配置数据没必要每次都查询数据库,只要在修改了的时候更新下缓存即可. Discuz! 中所有的缓存保存在 $_G[c ...
- OSI模型级各层功能
OSI(Open System Interconnection 即 开放系统互联)国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架.OS ...
- firefox56 版本中的 Selenium IDE 无法导出脚本问题
firefox:56 Slenium IDE :3系列 问题:Selenium IDE 没有工具栏,无法导出录制的脚本,这给自动化测试工作带来了极大的不便. 解决办法:将firefox 降级 (只有5 ...
- vue2.0教手架安装
- 【转】带栗子的GDB教程
带栗子的GDB教程 原文链接:http://www.cprogramming.com/gdb.html作者:Manasij Mukherjee 一个好的调试软件是一个程序猿的工具箱里最重要的工具之一, ...
- Linux 中find命令
1.在当前目录下找以txt结尾的文件 find . -name '*.txt' 2.在当前目录下找以所有字母开头的文件 find . -name '[a-z]*' 3.在/etc 目录下找以host开 ...