网上经常拿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. 转:Server.MapPath相关

    如果你从Page类继承的类中执行这条语句,才可以简单地使用 DataBase = Server.MapPath("data.mdb");否则写全命名空间:System.Web.Ht ...

  2. 【Howie玩docker】-Centos 7 docker 启动容器iptables报No chain/target/match by that name

    重启了一下服务器,以前能运行的docker网络应用都不能正常开启了. 因为用的是centos7,所以猜测有可能是iptables的问题. docker start 或者run 后总是提示类似的错误: ...

  3. Python 字符串格式化示例

    先看代码吧. #!/usr/bin/env python #-*- coding: utf-8 -*- __author__ = 'jiang' __creattime__ = '2015/10/31 ...

  4. 3D空间坐标系转换复习

    模型坐标系:ModelSpace     即模型本身为中心  模型本身自己 世界坐标系:WorldSpace    世界坐标系   整个世界 视角坐标系: ViewSpace       眼睛看到的范 ...

  5. web.config中<customErrors>节点

    错误提示: “/”应用程序中的服务器错误.------------------------------------------------------------------------------- ...

  6. 转 批处理 %~dp0的意义

    http://nealcai.iteye.com/blog/1685192 http://blog.csdn.net/caz28/article/details/7448677 http://stac ...

  7. poj2350

    #include <stdio.h> #include <stdlib.h> int main() { ],tim,i; scanf("%d",&n ...

  8. javascript数组去重算法-----4(另一种写法)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Numpy之ndarray与matrix

    1. ndarray对象 ndarray是numpy中的一个N维数组对象,可以进行矢量算术运算,它是一个通用的同构数据多维容器,即其中的所有元素必须是相同类型的. 可以使用array函数创建数组,每个 ...

  10. How to Type(dp)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...