Yii2.0详细讲解
来源:互联网 发布:云计算行业发展趋势 编辑:程序博客网 时间:2024/06/06 12:25
yii2框架的安装我们在之前文章中已经提到下面我们开始了解YII2框架
Yii2的应用结构:
目录篇:
如何设置默认访问控制器和方法 yii2
在/vendor/yiisoft/yii2/web/Application.php 的第28行
public $defaultRoute = 'site(改成你想要访问的控制器)';
1 2 3 4 5 6 7 8 9101112131415161718
<?phpdefined('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');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../common/config/main.php'),
require(__DIR__ . '/../../common/config/main-local.php'),
require(__DIR__ . '/../config/main.php'),
require(__DIR__ . '/../config/main-local.php'));
$application = new yii\web\Application($config);$application->run();
其中:
- config 就是通用的配置,这些配置将作用于前后台和命令行。
- mail 就是应用的前后台和命令行的与邮件相关的布局文件等。
- models 就是前后台和命令行都可能用到的数据模型。 这也是 common 中最主要的部分。
当开发一个大型项目开发周期长,我们需要不断调整数据库结构。出于这个原因,我们还可以使用数据库迁移(DB migrations )功能来保持跟踪数据库的变化。我们将所有 DB migrations(数据库迁移)目录同样都放在公共(common)目录下面。
- 目录 dev
- 目录 prod
- 文件 index.php
其中, dev 和 prod 结构相同,分别又包含了4个目录和1个文件:
- frontend 目录,用于前台的应用,包含了存放配置文件的 config 目录和存放web入口脚本的web 目录
- backend 目录,用于后台应用,内容与 frontend 相同
- console 目录,用于命令行应用,仅包含了 config 目录,因为命令行应用不需要web入口脚本, 因此没有 web 目录。
- common 目录,用于各web应用和命令行应用通用的环境配置,仅包含了 config 目录, 因为不同应用不可能共用相同的入口脚本。 注意这个 common 的层级低于环境的层级,也就是说,他的通用,仅是某一环境下通用,并非所有环境下通用。
- yii 文件,是命令行应用的入口脚本文件。
对于分散于各处的 web 和 config 目录而言,它们也是有共性的。
- 凡是 web 目录,存放的都是web应用的入口脚本,一个 index.php 和一个测试版本的index-test.php
- 凡是 config 目录,存放的,都是本地配置信息 main-local.php 和 params-local.php
入口文件篇:
1、入口文件路径:
http://127.0.0.1/yii2/advanced/frontend/web/index.PHP
每个应用都有一个入口脚本 web/index.PHP,这是整个应用中唯一可以访问的 PHP 脚本。一个应用处理请求的过程如下:
1.用户向入口脚本 web/index.php 发起请求。
2.入口脚本加载应用配置并创建一个应用实例去处理请求。
3.应用通过请求组件解析请求的路由。
4.应用创建一个控制器实例去处理请求。
5.控制器创建一个操作实例并针对操作执行过滤器。
6.如果任何一个过滤器返回失败,则操作退出。
7.如果所有过滤器都通过,操作将被执行。
8.操作会加载一个数据模型,或许是来自数据库。
9.操作会渲染一个视图,把数据模型提供给它。
10.渲染结果返回给响应组件。
11.响应组件发送渲染结果给用户浏览器
可以看到中间有模型-视图-控制器 ,即常说的MVC。入口脚本并不会处理请求,而是把请求交给了应用主体,在处理请求时,会用到控制器,如果用到数据库中的东西,就会去访问模型,如果处理请求完成,要返回给用户信息,则会在视图中回馈要返回给用户的内容。
2、为什么我们访问方法会出现url加密呢?
我们找到文件:vendor/yiisoft/yii2/web/UrlManager.php
<span style="font-size:24px;"> return "$baseUrl/{$route}{$anchor}";} else { $url = "$baseUrl?{$this->routeParam}=" . urlencode($route); if (!empty($params) && ($query = http_build_query($params)) !== '') { $url .= '&' . $query; }</span>将urlencode去掉就可以了3、入口文件内容 入口文件流程如下:
MVC篇:
一、控制器详解:
1、修改默认控制器
打开vendor/yiisoft/yii2/web/Application.php
eg:
public $defaultRoute = 'student';2、建立控制器示例:StudentController.php
//命名空间
namespace frontend\controllers;
use Yii;
use yii\web\Controller; vendor/yiisoft/yii2/web/Controller.php (该控制器继承的是\yii\base\Controller)\web\Controller.php中干了些什么 1、默认开启了 授权防止csrf攻击2、响应Ajax请求的视图渲染3、将参数绑定到动作(就是看是不是属于框架自己定义的方法,如果没有定义就走run方法解析)4、检测方法(beforeAction)//显示视图beforeAction()
方法会触发一个beforeAction
事件,在事件中你可以追加事件处理操作;5、重定向路径 以及一些http Response(响应) 的设置use yii\db\Query; //使用query查询use yii\data\Pagination;//分页 use yii\data\ActiveDataProvider;//活动记录 use frontend\models\ZsDynasty;//自定义数据模型class StudentController extends Controller{ $request = YII::$app->request;//获取请求组件 $request->get('id');//获取get方法数据 $request->post('id');//获取post方法数据 $request->isGet;//判断是不是get请求 $request->isPost;//判断是不是post请求 $request->userIp;//获取用户IP地址 $res = YII::$app->response;//获取响应组件 $res->statusCode = '404';//设置状态码 $this->redirect('http://baodu.com');//页面跳转 $res->sendFile('./b.jpg');//文件下载 $session = YII::$app->session; $session->isActive;//判断session是否开启 $session->open();//开启session //设置session值 $session->set('user','zhangsan');//第一个参数为键,第二个为值 $session['user']='zhangsan'; //获取session值 $session->get('user'); $session['user']; //删除session值 $session-remove('user'); unset($session['user']); $cookies = Yii::$app->response->cookies;//获取cookie对象 $cookie_data = array('name'=>'user','value'=>'zhangsan')//新建cookie数据 $cookies->add(new Cookie($cookie_data)); $cookies-remove('id');//删除cookie $cookies.getValue('user');//获取cookie
return $this->render('add'); 默认.php
return $this->render('upda',["data"=>$data]);
}
}
二、模型层详解
简单模型建立:
<?php namespace frontend\models;use Yii;// use yii\db\ActiveRecord;use yii\base\Model;// use yii\db\Query();class CartModel extends Model{ public static function tableName() { return 'cart'; } public function show() { }}?>
控制器引用<?phpnamespace frontend\controllers;use Yii;use yii\web\controller;use frontend\models\ListtModel;class ListtController extends Controller{ public function actionAdd(){ $model=new ListtModel; $data=$model->find()->asArray()->where("id=1")->all(); print_r($data); }}?>
三、视图层详解
首先在frontend下建立与控制器名一致的文件(小写)eg:student 在文件下建立文件eg:index.php
- Yii2.0详细讲解
- yii2权限控制rbac之rule详细讲解
- yii2.0-captcha验证码--详细设置
- Yii2.0的ActionFilter类详细解读
- yii2 安装详细教程
- 详细讲解
- 安装yii2详细方法 图文
- yii2 验证码详细代码
- yii2框架的详细介绍
- yii2框架的详细介绍
- yii2框架的详细介绍
- EventBus3.0框架使用详细讲解
- 手机视频格式详细讲解
- linux文件系统详细讲解
- jsessionid详细讲解
- 文件上传详细讲解
- 详细讲解Quartz.NET
- 详细讲解Quartz.NET
- 微信小程序开放公测 却不接受个人身份申请
- hdu5894 hannnnah_j’s Biological Test(2016 acm/icpc 沈阳网络赛,组合数学)
- Android链式结构封装
- 微信公众号用百度车联网API回复天气预报
- Java学习
- Yii2.0详细讲解
- Sqlserver查询数据库文件大小和剩余空间
- 数字化和社会化商业转型中首席信息官的作用
- ElasticSearch默认的分页参数 size
- ConcurrentHashMap的实现原理和源码分析
- git&github常用命令
- 多选框的全选和反选
- eclipse最有用快捷键整理
- No tests found matching 【junit 异常】