Quick Start for Yii2
来源:互联网 发布:python reshape函数 编辑:程序博客网 时间:2024/06/05 15:17
自有Yii2学习笔记。初稿(杂乱版)
1.yii2简易多国语言站点
在此路径加入你的翻译
advanced/vendor/yiisoft/yii2/messages/zh-CN/yii.php 'User Url' => '个人网址', 'Email' => '邮箱',
使用:
Yii::t('yii','Email')
2.yii2数据分页
在Gii生成的代码中找到$dataProvider,加入以下属性
'pagination' => ['pageSize' => 10, ],
Example
$dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'pageSize' => 10, ], ]);
3.自定义用户身份验证类
修改配置文件
advanced/backend/config/main.php
'components' => [ 'user' => [ 'identityClass' => 'common\models\Users', 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], ],],
4.修改日期显示格式
修改配置文件
advanced/backend/config/main.php
'components' => [ 'formatter' => [ 'class' => 'yii\i18n\Formatter', 'dateFormat' => 'php:Y/m/d', 'datetimeFormat' => 'php:Y年m月d日 H:i:s', 'timeFormat' => 'php:H:i:s', ],],
使用DetailView widget显示数据
<?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'created:datetime', 'activated:datetime', 'logged:datetime' ], ]) ?>
5.登录事件
yii2内含两个登录事件,登录前(beforeLogin),登录后(afterLogin)
on beforeLogin
on afterLogin
Example:登录后修改最后登录时间
修改配置文件
advanced/backend/config/main.php
'components' => [ 'user' => [ 'identityClass' => 'common\models\Users', 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], 'on afterLogin' => function($event){ $user = $event->identity; $user->logged = time(); $user->save(); } ],],
其中logged是你的字段名称
6.表单验证
1.$this->validate() 使用框架验证。【表单名必须和数据库字段名一致!】
2.自定义验证,并添加错误提示
<?php if(Users::findByUsername($_POST['SignupForm']['username'])){ $this->addError('username','用户名已被注册!'); }
7.$model->Save / update字段绑定
这个bitch way 终于找到门道了。详见目录第十三条。
/*在Yii2中,使用Save或者Update保存数据会触发beforeSave或者Updateemmmmm。目前不知道如何修改字段名称。。默认会向created_at填入timestamp,如果数据存在则向updated_at填入timestamp。但是如果数据库没有这个字段会报错。因此。。暂时修改框架源码实现字段名称修改。PS:群里问了一下没人回复。暂时这么修改把。我觉得应该有好的修改方式修改这个文件。。。。。。。。。。。advanced/vendor/yiisoft/yii2/rbac/DbManager.php*/This is a bitch way,no try
8.URL美化以及Nginx设置
修改config/main.php
'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],]
nginx配置如下:
在虚拟域名配置里加入如下代码即可。
if (!-e $request_filename){ rewrite ^/(.*) /index.php?r=$1 last; }
9.yii2-admin安装配置
1.使用composer或者归档文件形式进行下载安装。
2.配置config/main文件
'modules' => [ "admin"=>[ 'class' => 'mdm\admin\Module', 'layout' => 'left-menu' ]],'aliases' =>[ "@mdm/admin" => "@vendor/mdmsoft/yii2-admin",],'components' => [ 'authManager'=>[ 'class' => 'yii\rbac\DbManager' ], 'i18n' => [ 'translations' => [ '*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@frontend/messages', // if advanced application, set @frontend/messages 'sourceLanguage' => 'en', 'fileMap' => [ //'main' => 'main.php', ], ], ], ],],'as access' => [ 'class' => 'mdm\admin\components\AccessControl', 'allowActions' => []],'language' =>'zh-cn',
3.访问http://localhost/index.php?r=admin 或者 http://localhost/admin进行权限分配。
- 添加想赋予权限的路由
- 创建权限 例如:createPost权限
- 创建系统所需角色并授予对应的权限
- 分配权限/修改代码,创建用户时根据环境修改权限。
10.ArrayDataProvider配合GridView的数据显示
有些时候数据来自第三方接口,并不是来自数据库。这就需要我们用到ArrayDataProvider配合view的widget 例如GridView、DetailView等来显示数据。
贴代码:
xxxController.php
<?phppublic function actionIndex($page = 1,$pageSize = 10){ //...一些获取数据的操作 最后保存到$list变量中 $list = Api::getData(); //必须是Array类型如果是Object需要通过(array)强转 $dataProvider = new ArrayDataProvider([ 'allModels' => $list, 'pagination' => [ 'pageSize' => $pageSize, //分页大小 ], ]); return $this->render('index',['dataProvider' => $dataProvider]);}
在views的index.php 写如下内容:
<?php echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' =>[ ['label'=>'文件名', 'attribute' => '0'], ['label'=>'上传时间', 'attribute' => '1'], ['class' => 'yii\grid\ActionColumn'], ] ]); ?>
并且也自定义了字段显示的列名。
效果图
附自定义按钮
'columns' =>[ ['class' => 'yii\grid\SerialColumn'], ['label'=>'文件名', 'attribute' => '0'], ['label'=>'上传时间', 'attribute' => '1'], [ 'class' => 'yii\grid\ActionColumn',//下面开始自定义操作按钮 'template'=>'{view} {delete}' ], ]
图:
11.解决Yii2 Composer 不断检查前端资源导致速度慢问题
文章转载自http://www.kriss.pub/2017/06/24/yii2-composer/
内容有删改
此文档说明怎样解决 composer 在 yii2 下安装慢。
注:从yii2-2.0.12开始,官方已经采用该方案,详情
国内镜像不可行说明
yii2 通过 fxp/composer-asset-plugin 插件来安前端开发所用到依赖包
最佳方案
使用 asset-packagist.org
使用方式
编辑composer.json
增加:
"repositories": { "composer": { "type": "composer", "url": "https://asset-packagist.org" }}
删除
"fxp-asset":{ "installer-paths": { "npm-asset-library": "vendor/npm", "bower-asset-library": "vendor/bower" }
修改为taobao节点(非必须)
"extra": { "npm-asset-repository": "https://registry.npm.taobao.org"},
修改项目配置文件(basic 的 config/web.php,advanced 的 common/config/main.php):
若没有则增加
'aliases' => [ '@bower' => '@vendor/bower-asset', '@npm' => '@vendor/npm-asset',],
12.实战场景记录—获取用户面试详情以及姓名等个人信息
场景分析
典型的数据关联场景。Yii2使用Gii生成的model,会自动根据 外键建立以下魔术函数。
例如:
在面试评估表里生成了和 基本信息表 的关联
HlyAudition.php
<?php /** * @return \yii\db\ActiveQuery */ public function getHly() { return $this->hasOne(HlyBaseInfo::className(), ['id' => 'hly_id']); }
那么在获得一个面试评估详情model后即可使用 $model->hly 来获得一个护理员的model
示例代码如下:
<?php $audition = $query::findOne($id); return $this->render('view',[ 'model' => $audition->hly, 'dataProvider' => $audition ]);
这样会向view传送一个 面试评估详情的model 和其相关的 护理员基本信息model
这样view层即可这样使用:
$this->title = $model->name.' - 评估报告';// 张三 - 评估报告<?= DetailView::widget([ 'model' => $dataProvider, 'attributes' => [ 'id', 'hly_id', [ 'label'=>'姓名', 'value'=>$model->name, ], 'create_date', 'update_date', ] ]);?>
这里有个用法 在使用detailView时(其它widget暂时未测试),
value可以使用和参数model中不同的model.达到一个widgets显示两个model的数据。
PS:如果没有外键,也可以通过自己手动创建get魔术方法 来实现这样的关联。极好用!~~*
其它使用参考
https://www.cnblogs.com/yiifans/p/3786374.html
13.实战场景记录—behaviors的使用
场景描述
在插入数据库数据的时候,设置字段 操作人员ID ,为当前登录用户ID。并且修改记录时 ,也记录当前操作人员的ID。
场景分析
在刚开始使用Yii时,没有掌握behaviors的使用,
只能通过
来设置操作员ID。
但是这样重复代码非常多。那么这个时候就可以用到behaviors了!
开始操作
在你需要的表的model里重写behaviors方法。
代码如下
<?phpnamespace backend\models;use Yii;use yii\behaviors\AttributeBehavior;use yii\behaviors\BlameableBehavior;class HlyImages extends \yii\db\ActiveRecord{ public function behaviors() { return array_merge(parent::behaviors(), [ [ 'class' => AttributeBehavior::className(), 'attributes' => [ self::EVENT_BEFORE_INSERT => 'status', ], 'value' => function ($event) { return '1'; }, ], [ 'class' => BlameableBehavior::className(), 'createdByAttribute' => 'authorID', 'updatedByAttribute' => 'authorID ', ], ]); }//...}
以上例子使用了两个behavior,更多使用见官方手册或yiichina某人教程
http://www.yiiframework.com/doc-2.0/guide-concept-behaviors.html
http://www.yiichina.com/tutorial/830
14.实战场景记录—显示所有目录以及其文章数量
数据关联场景
显示效果如图:
如果模型里有关联(getXXX方法) 可以直接在视图写如下代码:
<?= GridView::widget(['dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'category', [ 'label'=>'文章数量', 'value'=>function($model){ return count($model->Post); } ], ] ]); ?>
15.实战场景记录—girdView checkboxColumn指定值
场景描述
在全选批量提交的时候,发现提交的key是当前model的ID,但是有的时候,我们需要的是其它数据,用来提交,然后做响应事情。
研究过程
首先使用’class’ => ‘yii\grid\CheckboxColumn’,
这个不必多说,第一眼想到这个需求的时候就是设置其value。
错误思路1.
'columns' => [ 'class' => 'yii\grid\CheckboxColumn', 'value'=>function($model){$model->class_id} ]
这个时候报错,原来CheckboxColumn并没有value属性。
然后翻看手册,看到了checkboxOptions属性。
错误思路2.
'checkboxOptions' => function($model, $key, $index, $column) { return ['value' => $model->class_id]; },
发现确实checkbox的value改变了。但是。。提交的时候的值并不是value..而是tr上面的data-key….
同样又尝试过…
'rowOptions' => function($model, $key, $index, $column) { return ['data-key'=>$model->class_id]; }
百度了一下。。
可以在dataProvider里面设置这个key。就可以啦~于是
$dataProvider = new ActiveDataProvider([ 'query' => $query, 'key' => function($model){$model->class_id}, ]);
大功告成~
- Quick Start for Yii2
- PhoneGap Quick start for BlackBerry
- Quick Start for Direct3D 9 for Developer
- OpenSSH for Windows: Quick Start Guide
- OpenSSH for Windows: Quick Start Guide
- Flex quick start guide for PHP developers
- Quick Start Guide for Server Clusters
- Quick Start Guide for Z-Wave
- Quick Start
- Quick Start
- Quick start for Microsoft MVC3 with Razor View Engine
- Lsof Readme and Quick Start for Lsof(1,2,3)
- Quick Start Guide for Apache Hawq[作者:盛想]
- WAP Push Quick Start
- Purify Quick Start
- [Avalon] Quick Start
- CodeSmith Quick Start Guide
- JavaMail quick start
- AVL树
- 服务器控件智能提示不起作用的解决办法
- Linux中大文件分割split和合并cat文件笔记
- Java 进阶:异常影响性能吗?
- 【Java】:args
- Quick Start for Yii2
- Python 学习(2):基础知识点
- ActiveMQ系列—ActiveMQ集群方案(下)(热备方案)
- Oracle 常用函数
- Python 学习(3):基础知识点
- numpy使用文件中的数据、图像处理等
- Python 学习(4):基础知识点
- ConstraintLayout 新版本导入不成功
- iOS【彻底清空APP缓存】