网上经常拿Yii来类比ROR,从MVC角度,使用体验及代码风格上确实有很多相似的地方。不过看配置文件发现Yii2不止是受rails的影响,同样有不少spring的影子,最明显的就是配置文件中很多IOC和AOP的体现。Yii和spring都实现了一个IOC容器来管理对象依赖关系及其生命周期。Yii2使用了Service Locator(IOC的一种实现)与DI,通过config/web.php文件配置。spring则需要配置xml文件,其中AOP配置可通过xml文件或者代码注解(需要依赖AOP框架)实现,和hibernate类似 。

IOC是很好的设计模式,程序可方便接偶,具体参照经典

IoC 容器和 Dependency Injection 模式

对于AOP的实现(这个模式在WEB应用使用场景有限),PHP传统的实现方法是采用魔术方法,通过钩子函数来注入,java则基于反射性质,推荐下面几篇文章。

AOP的实现机制

我对AOP的理解

Spring AOP 实现原理

CI通过下面添加钩子函数也能实现AOP,不过不如Yii原生支持得好

#config/config.php

$config['enable_hooks'] = TRUE;

$config['acl_pass'] = array(
'testcontroller' => array('index'=>true,'getsecret'=>false),
'welcome' => array('login'=>true)
); #config/hook.php $hook['pre_controller'] = array(
'class' => 'My_acl',
'function' => 'hook_acl',
'filename'=> 'acl.php',
'filepath' => 'hooks',
'params' => array(),
); #hooks/acl.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class My_acl extends CI_Controller{ function hook_acl()
{
global $RTR;
$controller = $RTR->class;
$method = $RTR->method; $config = & load_class('Config');
$config->load('acl_pass',true,true);
$acl_settings = $config->item('acl_pass'); if(!isset($acl_settings["$controller"]) or !isset($acl_settings[$controller][$method]) or $acl_settings[$controller][$method]==false){
$haslogin = $this->session->userdata('userid');
if(!$haslogin){
show_error('Access Forbidden', 403);
}
}
}
}

Yii2简单纪要的更多相关文章

  1. yii框架美化访问路径,去掉index.php/?r=部分

    一.找到配置文件(ps:advance高级模板) 在工程目录-> backend目录 或 frontend目录 -> config目录 -> main.php文件 -> 在 r ...

  2. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  3. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  4. 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  5. 简单分析下用yii2的yii\helpers\Html类和yii.js实现的post请求

    yii2提供了很多帮助类,比如Html.Url.Json等,可以很方便的实现一些功能,下面简单说下这个Html.用yii2写view时时经常会用到它,今天在改写一个页面时又用到了它.它比较好用的地方就 ...

  6. Yii2设计模式——简单工厂模式

    除了使用 new 操作符之外,还有更多的制造对象的方法.你将了解到实例化这个活动不应该总是公开进行,也会认识到初始化经常造成"耦合"问题. 应用举例 yii\db\mysql\Sc ...

  7. Yii2 设计模式——简单工厂模式

    除了使用 new 操作符之外,还有更多的制造对象的方法.你将了解到实例化这个活动不应该总是公开进行,也会认识到初始化经常造成“耦合”问题. 应用举例 yii\db\mysql\Schema 中: // ...

  8. Yii2 的安装及简单使用

    前段时间第一次使用Yii2框架,碰到了一些问题,这里记录一下. Yii2安装:通过composer安装 1.首先要安装composer,我在另外一篇博客中介绍了如何在Windows下安装compose ...

  9. Yii2系列教程五:简单的用户权限管理

    上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说Yii2之中的用户和权限控制. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步一步按照这个教程来做. 鉴于本教 ...

随机推荐

  1. artTemplate-3.0

    https://github.com/aui/artTemplate artTemplate-3.0 新一代 javascript 模板引擎 目录 特性 快速上手 模板语法 下载 方法 NodeJS ...

  2. Android Studio常用小技巧

    1. Debug 模式查看变量的值: To quickly evaluate the value of any expression while debugging the program, hold ...

  3. jquery结合highcharts插件显示实时数据动态曲线图

    效果如图所示: js代码如下: $(document).ready(function() { Highcharts.setOptions({ global: { useUTC: false }, co ...

  4. C#学习日志 day10 -------------- problem statement

    Revision History Date Issue Description Author 15/May/2015 1.0 Finish most of the designed function. ...

  5. 走进C标准库(2)——"stdio.h"中的fopen函数

    其他的库文件看起来没有什么实现层面的知识可以探究的,所以,直接来看stdio.h. 1.茶余饭后的杂谈,有趣的历史 在过去的几十年中,独立于设备的输入输出模型得到了飞速的发展,标准C从这个改善的模型中 ...

  6. 用不动点组合子解递归(python实现)

    不动点组合子 Y = λf. (λx. f (x x)) (λx. f (x x)) θ = (λx. λy. (y(x x y))) (λx.λy.(y(x x y))) Y f = f (Y f) ...

  7. 12.java.lang.NoSuchMethodException

    java.lang.NoSuchMethodException 方法不存在异常 当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常

  8. 用“U盘”重新安装(MSDN)原版Windows XP sp3操作系统(图文)

    安装微软(MSDN)原版Windows XP sp3系统的方法不少,可以说是很多,但是我就用“U盘”安装.用“U盘”装XP系统也不是什么稀罕事,不会的,就按照下面我常用的“U盘”装原版Windows ...

  9. silverlight datagrid绑定匿名类

    原文 http://www.cnblogs.com/luweis/archive/2011/10/21/2220587.html 刚开始遇到的一个问题是这样的,我有一个datagrid,根据不同的条件 ...

  10. poj2583---Series Determination

    #include <stdio.h> #include <stdlib.h> int main() { int x,y,z,a,b,c; while(scanf("% ...