不孬

less is more


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Yii的路由功能

发表于 2018-11-10 | 更新于 2019-07-09 | 分类于 yii | 阅读次数:

前言

路由规则的原理就是根据请求的参数A ---> 找到要执行的B,项目中生成url刚好是相反的方向 B ---> A 。原理很简单,yii的路由通过正则的方式进行匹配和映射。我们的重点看一下使用

urlManager

urlManager 作为一个url管理者,所有的路由规则 UrlRule 通过它来管理
在匹配路由的时候会根据配置的先后顺序从上到下进行对 UrlRule 进行匹配,匹配到的直接返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
'components' => [
'urlManager' => [
'enablePrettyUrl' => true,// 开启 url美化
'showScriptName' => false,//隐藏入口文件 index.php
'enableStrictParsing' => false,//true严格按照rules匹配,也就是必须匹配定义的rules才能解释,正常默认是的失效
'suffix' => '.html',// 后缀
// 路由规则
'rules' => [
// ...
],
],
],
]

动态的添加路由规则

添加规则,模块在bootstrap启动的会后有的需要注册自己规则的通过这个添加,如gii、debug模块就用到

1
public function addRules($rules, $append = true)

阅读全文 »

Yii的依赖注入容器和服务定位器

发表于 2018-11-09 | 更新于 2018-12-06 | 分类于 yii | 阅读次数:

前言

Yii提供这两个类来进行解耦,功能有多强大呢?yii中创建的对象几乎都是通过容器的方式创建的, 可以看一下 Yii::createObject() 方法,而 $app 本身就是一个服务定位器。由于具体的细节比较多,如果需要详细代码可以参考深入理解Yii2.0和看源码,这里只说一下大概的原理

依赖注入容器 Container

为了解决两个类的强耦合,通常我们的做法是通过 构造方法 或者 属性赋值 的方式将一个对象注入到另一个对象中。小项目其实也没什么问题,但是当项目大起来的时候,依赖关系复杂的时候,就会让这个流程变得复杂起来, 容器就很好的解决类这个问题,只需要将依赖关系注册到容器,获取对象的时候容器自动将完成各对象之间的依赖关系。容器这里用的是 构造方法 注入的方式。

阅读全文 »

类级别事件

发表于 2018-11-09 | 更新于 2018-12-06 | 分类于 yii | 阅读次数:

前言

Event类有两个作用,一个是作为触发事件时携带的一个事件对象,另一个就是定义类级别的事件,其实和对象级别( Component 中定义)的基本一致

类级别和对象级别的事件有什么区别呢?

  1. 注册对象级别的事件,只能通过所注册的对象进行触发
  2. 注册的类级别的事件,可以触发的情况就比较多;
    1. 对象触发事件的时候在最后是调用一下类级别的触发事件 Event::trigger() ,如果该对象的 所有继承的父类、所有实现接口上绑定了这个事件,将会触发
    2. 也就是说通过对象或类进行触发事件,如果对象或类的父类中或实现的接口中包含了当前注册事件的类,如果这个类有这个事件,将都会导致触发这个类注册的这个事件

解析

属性

1
2
3
4
public $name; // 事件名
public $sender; // 事件发布者,通常是调用了 trigger() 的对象或类。
public $handled = false; // 是否终止事件的后续处理
public $data; // 事件相关数据,事件绑定on时传递的数据
阅读全文 »

yii基础类Object

发表于 2018-11-09 | 更新于 2018-12-06 | 分类于 yii | 阅读次数:

前言

object 作为Yii的最基础的类,只是简单的实现了属性的功能

方法解析

构造函数–配置对象

通过数组来对对象的属性进行配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
//调用初始化方法
$this->init();
}
//Yii::configure($this, $config); 给对象的属性赋值
如下
public static function configure($object, $properties)
{
foreach ($properties as $name => $value) {
$object->$name = $value;
}
return $object;
}
阅读全文 »

Yii-Excel

发表于 2018-11-09 | 更新于 2018-11-10 | 分类于 yii | 阅读次数:

说明

对excel的操作常用的操作一般还是比较简单的,如果直接去看 phpexcel 可能会感觉方法太多而无从下手,我们这里直接用经过封装过的 yii-excel 来进行学习就相对简单的多,最后也提供了一个更简单的写excel的和读写csv的两个类供参考学习
用到的两张表放在最后附件了,自行下载,用到的两个模型类是通过 gii 直接创建的

开始

安装 yii-excel

直接进项目执行

1
composer require --prefer-dist moonlandsoft/yii2-phpexcel "*"

安装后 vendor 目录下将会多两个文件夹 moonlandsoft/yii-phpexcel 和 phpoffice/phpexcel

阅读全文 »

Component实现行为和事件

发表于 2018-11-09 | 更新于 2018-12-06 | 分类于 yii | 阅读次数:

前言

Component 算是yii最核心的基础类了,同时实现了事件和 Behavior
Component 虽然继承与 Object ,但为了实现 Behavior 对象的属性和方法的注入, Component 重写了 Object 中所有和调用属性和方法有关的方法。原理也很简单,就是在当前对象找不到的属性或方法,在绑定的行为里再找一遍

例如调用不存在的方法的时候

1
2
3
4
5
6
7
8
9
10
11
12
13
public function __call($name, $params)
{
// 先确保注册的behaviors绑定
$this->ensureBehaviors();
// 检查绑定的behaviors中有没有要调用的方法
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' .
get_class($this) . "::$name()");
}

阅读全文 »
1234…8
echo-ding

echo-ding

纸上得来终觉浅,绝知此事要躬行。

44 日志
26 分类
54 标签
GitHub E-Mail 微博 知乎
Links
  • bunao
© 2019 echo-ding
由 Hexo 强力驱动 v3.3.7