Yii2使用教程
Posted 淡淡的幸福
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2使用教程相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/chengbocd/p/6125533.html
https://www.yiichina.com/doc/guide/2.0/start-gii
https://www.cnblogs.com/mthp/articles/6953692.html
安装
中文文档:http://www.yiichina.com/doc/guide/2.0/start-installation
1,安装
这里我直接下载归档文件,压缩包安装了。composer各种麻烦,国情你懂得。
https://github.com/yiisoft/yii2/releases/download/2.0.2/yii-basic-app-2.0.2.tgz
Yii 2.0 需要 php 5.4.0 或以上版本支持。
解压至我的web目录 E:\\wamp\\www\\ibrain\\
2,配置
config/web.php 第12行
\'cookieValidationKey\' => \'123\',//若你通过 Composer 安装,则此步骤会自动完成
config/db.php
return [ \'class\' => \'yii\\db\\Connection\', \'dsn\' => \'mysql:host=localhost;dbname=ibrain\',//数据库配置 \'username\' => \'root\', \'password\' => \'\', \'charset\' => \'utf8\', \'tablePrefix\'=>\'ib_\',//表前缀,默认没有的,自己加上 ];
ok, 跑 http://localhost/ibrain/web/index.php
和http://localhost/ibrain/web/index.php?r=site/index?param=value 是完整路径
运行,看到 Congratulations! 界面了。
看根目录目录,没有index首页文件,如果访问http://localhost/ibrain会看到目录,如果不想改host配置,那我们可以新增一个index.php咯,指向web/index.php。
header("Location:web/index.php");die;
入门HelloWorld
为了弄清楚运行的机制,我们跑一个helloworld测试。
首先看/web/index.php
<?php // comment out the following two lines when deployed to production defined(\'YII_DEBUG\') or define(\'YII_DEBUG\', true);//调试模式 defined(\'YII_ENV\') or define(\'YII_ENV\', \'dev\');//前端的调试工具 require(__DIR__ . \'/../vendor/autoload.php\'); require(__DIR__ . \'/../vendor/yiisoft/yii2/Yii.php\'); $config = require(__DIR__ . \'/../config/web.php\'); (new yii\\web\\Application($config))->run();//这种写法就是5.4以上才支持
执行后的默认首页,是跑到/controller/SiteController.php 下的actionIndex()去了。然后调用的/view/site/index.html
那我现在要换掉默认控制器,在/config/web.php 中添加一句 \'defaultRoute\' => \'index\', 这样默认控制器就是/controller/IndexControllor.php的actionIndex()了。不建议修改application.php 下的public $defaultRoute = \'site\'; 框架文件最好不要修改。下面是代码
<?php namespace app\\controllers; use Yii; use yii\\web\\Controller; class IndexController extends Controller { public function actionIndex() { die("Hello world!!");//访问http://localhost/ibrain/index.php?r=index/index //return $this->render(\'index\');// /view/Index/index.html } public function actionHello() { die("Hello world!!!!!");//http://localhost/ibrain/index.php?r=index/hello ,index.php可以省略。 } }
数据库操作
上面的例子跑起来后,我想要从mysql中取点数据出来耍耍。开头我们的数据库已经配置好了名称为ibrain的数据库。
添加一张用户表,表结构:
CREATE TABLE `ib_admin` ( `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT \'用户ID\', `gid` int(8) NOT NULL COMMENT \'用户组ID\', `username` varchar(25) NOT NULL COMMENT \'账号\', `password` varchar(100) NOT NULL COMMENT \'密码\', `nickname` varchar(100) DEFAULT NULL COMMENT \'昵称\', `sort` int(11) DEFAULT NULL COMMENT \'排序\', PRIMARY KEY (`uid`), KEY `group` (`gid`), KEY `usrname` (`username`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=\'用户表\';
下面要用yii来做CURD操作。
yii2没有空模型,必须实体类来映射表,这点TP的ORM我比较喜欢。
<?php // app/models/Admin.php 声明Admin模型,对应admin表 namespace app\\models; use yii\\db\\ActiveRecord; class Admin extends ActiveRecord { }
<?php // app/controller/IndexController.php namespace app\\controllers; use Yii; use yii\\web\\Controller; use app\\models\\Admin; //引入这个空间,下面才能调用静态方法 class IndexController extends Controller { public function actionIndex() { //db方法可以参考yii2\\db\\下面的很多数据库操作类,非常丰富 $res=Admin::findAll(array(\'gid\'=>1)); var_dump($res);
$query = Admin::find()->asArray()->all();//如果不想要取出来的数据时对象类型,可以用asArray方法转换成数组
var_dump($query);
//插10条记录 /* for($i=20;$i<=30;$i++){ $admin=new Admin(); $admin->gid=$i; $admin->username="admin".$i; $admin->password="admin".$i; $admin->nickname="findgor".$i; $admin->sort=$i; $admin->insert();//插入数据 } */ //修改 /*$row=Admin::findOne(array("uid"=>19));//这是对于数据对象操作 $row->username="test"; $row->update(); */ /* 删除 $row=Admin::findOne(19); $row->delete(); */ } }
下面就是yii的特色菜GII了,快速生成代码,开启和关闭可以在入口文件中指定 yii_env执行环境。
跑:http://localhost/ibrain/web/index.php?r=gii
可以创建很多东西,先来个模型吧,model->start
可以预览生成的文件,使用很简单。参考:http://www.yiichina.com/doc/guide/2.0/start-gii
再来生成curd:也就是增删改查的代码,会自动生成页面。非常流弊 Model Class: app\\models\\Info Search Model Class: app\\models\\InfoSearch Controller Class: app\\controllers\\InfoController View Path: \\views\\info
好了,生成完后,我们可以访问一下,http://localhost/ibrain/web/index.php?r=info
项目演练
很多东西是需要在做项目中才能发现的,带着问题才能更好的学习,但切记不要一遇到问题就钻牛角尖。
下面正式修改项目。首先把头部和尾部的修改一下吧。
尾部在布局文件中,\\veiws\\layout\\main.php
<?= Yii::powered() ?> 这个在\\yii2\\BaseYii.php 465行 powered
登陆功能:
http://www.yiichina.com/tutorial/332
=============================
在curd生成的页面中,默认的显示往往不足以满足我们,所以下面来改动一下。
看模板文件内的数据列表。
<p> <?= Html::a(\'创建信息\', [\'create\'], [\'class\' => \'btn btn-success\']) ?> </p> <?= GridView::widget([ \'dataProvider\' => $dataProvider, \'filterModel\' => $searchModel, \'columns\' => [ \'id\', \'type\', \'title\', \'keyword\', \'content:ntext\', [\'class\' => \'yii\\grid\\ActionColumn\',\'header\' => \'操作\', \'headerOptions\' => [\'width\' => \'100\']], ], ]); ?>
1.Showing 1-5 of 39 items. 这个统计要改成中文,在基础列表视图类widget\\BaseListView.php line:190
2.显示的标题要修改的话,可以在model写一个attributeLabels()方法
public function attributeLabels() { return [ \'id\' => \'编号ID\', \'type\' => \'类型\', \'title\' => \'标题\', \'keyword\' => \'关键字\', \'content\' => \'内容\', ]; }
3.要改一页显示的条数,在生成的infosearch.php中添加配置
public function search($params) { $query = Info::find(); $dataProvider = new ActiveDataProvider([ \'query\' => $query, \'pagination\' => [ \'pagesize\' => \'5\',//一页显示5条数据 ] ]);
那么对一个单表的操作也差不多了,但是考虑后台的复杂性,往往会出现:
1.多表关联查询后的记录
2.自定义搜索字段
3.增加字段操作,比如加一个审核。
以上是关于Yii2使用教程的主要内容,如果未能解决你的问题,请参考以下文章