下载版本basic与advanced区别
Codeception 测试
/
/
功能
Basic
advanced
Project 结构
/
/
网站控制器
/
/
用户登录/登出
/
/
表单
/
/
数据库连接
/
/
命令控制台
/
/
资源包
/
/
Bootstrap
/
/
前后台应用
/
可用的 User 模型
/
用户注册和密码恢复
basic 和 advanced 都自带有一些基本功能,Home页面、登录/登出、和数据库连接等功能。但是,
basic 更适合新手,特别是刚刚接触 yii 的入门开发人员。
adavanced 随包自带两个应用:前台应用 frontend 和后台应用 backend ,basic 中只有一个应用 web 。advanced 将前台和后台分开,方便开发者直接基于这两个应用搭建有前后台的完整网站,并且可以为前后台分别绑定不同域名。所以,advanced 比 basic 稍微复杂一点,不适合新手,适合学过yii的。
参考链接: https://www.awaimai.com/600.html
Yii中,别名以 @
开头,以区别于正常的文件路径和URL
Yii2.0-advanced细节捡取
入口文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 http://127.0.0.1/index.php?r=index /index.php: 指明请求入口的php文件 ?r=index:指明请求的是IndexController控制器的默认方法(actionIndex) 入口index.php中,加载helper文件夹中function.php文件函数 require(_DIR_.'/../helper/function.php) 自定义辅助函数 function dd(){ echo "<pre>" var_dump($data) echo "</pre>" die; }
请求组件:get获取参数id
1 2 3 4 5 请求方法判断:$request->isPost或isGet 当前用户ip地址:$request->userIP $request=\Yii::$app->request; echo $request->get('id',1) 1为默认值,id没有则为1
请求组件:post获取,用户postman 模拟表单参数,body中form-data
1 2 3 $request=\Yii::$app->request; $username= $request->post('username','n') n为默认值,username没有则为n dd($username)
传参至视图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 变量放入1个数组,将零散的数据组装在一个数组里面 $na=['nihao'=>'sdjhjh', ...] data[ 'username'=>'lalla', ... 'arr'=>[ 'age' =>7, ... ] 'na'=>$na ] return $this->rederPartial('index',$data) 视图 <?php echo $username ?> <?php echo $arr['age'] ?> 可以用conpact()代替$data return $this->rederPartial('index',compact('$na','')) reder与rederPartial对比,会渲染父模板,并将内容嵌入,后者不渲染 父模板在views中的layouts目录,main.php文件(通用)
SQL调用:
框架本身拥有一些基类,比如ActiveRecord。创建的Article需要继承这个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 查 查询全部数据 $data=Article::find()->all(); 查询单条数据 $data=Article::find()->where('id'=>5)->all(); id>3 $data=Article::find()->where(['>',id',3])->all(); id在2和5之间 并变为数组输出(节约内存) $data=Article::find()->where(['between',’id',2,5])->asArray()->all(); 大量数据,每次取100条(默认)减轻内存压力 foreach(Article::find()->batch(2) as $article){ echo count($article),'-'; } 增 $article = new Article(); $article->title='XXXX'; $article->num=10; $data=$article->insert();或->save(); 查看属性值$article->attributes['id']; 改 update()或save() updateAllCounters(['num'=>1])每次查看num+1 删 delete('id>:id and num<:num',[':id'=>13,':num'=>100]);deleteall
or的使用
1 2 3 $where='is_delete=:is_delete and type=:type and (digest || title like :keywords)'; $addparams=[':is_delete'=>0,':type'=>intval($type),':keywords'=>'%'.$keywords.'%']; $news=$newsmodel->find()->where($where)->addParams($addparams);
关联
一对多:hasmany
1 2 3 $category=Category::findOne(1); $article=$category->hasMany('app\models\Article',['cate_id'=>'id'])->all(); 或$article=$category->hasMany(Article::className(),['cate_id'=>'id'])->all();
在模型中定义一对多 默认all()
1 2 3 4 5 6 7 8 9 10 class Category extend ActiveRecord{ public function getArticle() { $article=$this->hasMany('app\models\Article',['cate_id'=>'id'])->all(); return $article; } } $category=Category::findOne(1); $article=$category->getArticle();或取属性值->articles all()二维数组one()一维
一对一:hasOne 默认one()
可以用with()替代循环,使它只需要一次sql查询,其中应用了join的原理
$articles=Article::find()->with(‘category’)->asArray()->all();
a标签发送post请求
1 2 3 4 5 6 7 use yii\web\UrlManager; $urlManager = new UrlManager(); <a class="layui-btn layui-btn-normal" href="<?= $urlManager->createUrl(['caselist/create']) ?>">添加案例</a> http://www.xiaochengfu.com/index.php/index/detail/aid/64.html
yii2-basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ├──assets 用来存放js和css文件 ├──commands 包含控制台命令类 ├──config 对yii2做基本配置 console.php 控制台应用配置信息 web.php Web 应用配置信息 ├──controllers 存放控制器类 ├──models 存放模型类 ├──runtime 包含 Yii 在运行时生成的文件,例如日志和缓存文件 ├──vender 包含已经安装的 Composer 包,包括 Yii 框架自身 ├──views 视图目录,用于存放模板 ├──web Web 应用根目录,包含 Web 入口文件 assets/ 包含 Yii 发布的资源文件(javascript 和 css) index.php 应用入口文件 ├──composer.json Composer 配置文件, 描述包信息
控制器的一些方法
1 2 3 4 5 6 7 8 重定向 $this->redirect([‘test/index’]) 回到首页 $this->goHome() 返回 $this->goBack() 刷新当前页面 $this->refresh() 渲染视图 $this->render(视图,注入视图数组数据) 渲染没有layout的视图 $this->renderPartial(视图,注入视图数组数据) 响应Ajax请求,有layout的视图 $this->renderAjax(视图,注入视图数组数据) 修改Test控制器的index操作
例如:
1 2 3 4 5 6 7 8 TestController中调用return $this->render('index',['data'=>[1,2,3]]); 在@app\views\test\index.php中获取Test控制器注入的值 <?php foreach ($data as $key => $value) { echo $value."<br />"; } ?>
模型
模型在@app\models目录下模型类名与模型文件名同名,Model一般继承与两个yii2的类,一个是关联到数据库的yii\db\ActiveRecord,这个时候如果类名(文件名)不能与表直接对应,需要通过tableName()公共静态方法显式的指定表名,另一个是继承自yii\base\Model类。
sql调用与yii2-advance类似
模型继承AtiveRecord
AtiveRecord 是继承自Model的,Model有的ActiveRecord 都有。
Active Record (活动记录,以下简称AR)提供了一个面向对象的接口, 用以访问数据库中的数据。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。 您可以直接以面向对象的方式来操纵数据表中的数据
Model 模型是 MVC 模式中的一部分, 是代表业务数据、规则和逻辑的对象。可通过继承 yii\base\Model 或它的子类定义模型类,Model用于一些没有操作数据库的模型,比如表单
如果你需要跟数据库打交道,那你继承ActiveRecord,否则,你继承Model,当然,由于AR继承自Model,所以它同样也支持Model的数据输入、验证等特性。并不是所有的模型都一定是操作数据库的