可信网站认证通过哪里专业?

CI框架扩展系统核心类的方法分析
CI框架扩展系统核心类的方法分析
本文实例讲述了CI框架扩展系统核心类的方法。分享给大家供大家参考,具体如下:
首先你系统扩展类是放在application/core下面的,本来系统核心类是CI_Controller,所以你不能以CI_开头了,你需要打开 application/config/config.php 修改:
$config['subclass_prefix'] = 'MY_';
为你的前缀!
一些公共的模块就可以卸载自己的核心类里面了!
这几天读了Dilicms(轻量级的后台架构),比如说他的后台扩展类是这样的:
&?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
abstract class Admin_Controller extends CI_Controller
* 保存当前登录用户的信息
* @var object
* @access public
public $_admin = NULL;
* 构造函数
* @access public
* @return void
public function __construct()
parent::__construct();
$this-&load-&library('session');
$this-&settings-&load('backend');
$this-&load-&switch_theme(setting('backend_theme'));
$this-&_check_login();
$this-&load-&library('acl');
$this-&load-&library('plugin_manager');
* 检查用户是否登录
* @access protected
* @return void
protected function _check_login()
if ( ! $this-&session-&userdata('uid'))
redirect(setting('backend_access_point') . '/login');
$this-&_admin = $this-&user_mdl-&get_full_user_by_username($this-&session-&userdata('uid'), 'uid');
if ($this-&_admin-&status != 1)
$this-&session-&set_flashdata('error', "此帐号已被冻结,请联系管理员!");
redirect(setting('backend_access_point') . '/login');
* 加载视图
* @access protected
* @param string
* @param array
* @return void
protected function _template($template, $data = array())
$data['tpl'] = $
$this-&load-&view('sys_entry', $data);
* 检查权限
* @access protected
* @param string
* @return void
protected function _check_permit($action = '', $folder = '')
if ( ! $this-&acl-&permit($action, $folder))
$this-&_message('对不起,你没有访问这里的权限!', '', FALSE);
* 信息提示
* @access public
* @param string
* @param string
* @param bool
* @param string
* @return void
public function _message($msg, $goto = '', $auto = TRUE, $fix = '')
if($goto == '')
$goto = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : site_url();
$goto = strpos($goto, 'http') !== false ? $goto : backend_url($goto);
$goto .= $
$this-&_template('sys_message', array('msg' =& $msg, 'goto' =& $goto, 'auto' =& $auto));
echo $this-&output-&get_output();
它就把一些公共信息入验证,登陆,跳转放在Admin_Controller里面,于是我在写前台的时候也是这样操作,扩展了Font_Controller:
abstract class Font_Controller extends CI_Controller{
public function __construct() {
parent::__construct();
//前台加载视图方法
public function _template($template, $data = array()){
$data['nav'] = $this-&get_nav();
$data['tpl'] = $
$this-&load-&view('default',$data);
//公共导航信息
public function get_nav(){
//公共友情链接信息
public function get_friendlink(){
提示,一些经常用到得工具和函数可以放在helper中!
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。
Copyright & 2016 phpStudy您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
从扩展核心知识开始-从制造业到服务业.ppt42页
本文档一共被下载:
次 ,本文档已强制全文免费阅读,若需下载请自行甄别文档质量。
文档加载中...广告还剩秒
需要金币:100 &&
从扩展核心知识开始-从制造业到服务业.ppt
你可能关注的文档:
··········
··········
J小M第八次h-服ID型 日
徐 小 波 宇智股份有限公司 董事L暨绦虚L 立政治大W科技管理研究所 兼任教授 r代基金 绦虚L }V 难u造I到服IC以GE、Ford Motor Credit槔 U展核心知R - know-how and service provider 取H税搁_拓市 高附加r值服I ξ科技aI之期待 Y 难u造I到服IC以GE槔 难u造I到服IC以GE槔 1878年由鄣仙建立 130年的v史L河,藉由U展其核心知R,GE由u造IDQ成服I 工I服 例如:GE Energy
金融服 例如:GE Capital
工I服 例如:GE Energy
SLO渑c服 O渥赓U服 S操作I\服 SL期So服 整S效能提N及a品升 整w效能的提升及套bw a品升 其他有P能源的技g服
整S出服 金融服 例如:GE Capital
GE商杖谫Y服 Ya重整c管理 空中C租U 商用O渥赓U及融Y服 企I融Y及找 房地a管理 GE消M融Y服 汽融Y服 信用卡I 保UI Ford Motor Credit Co. 原淼脑O立目的是榻Q收た钸^高的} Ford Motor Credit以提供汽分期、批售融Y、I\Y金融Y等a品予消M者cN商
藉由融Y、租U、分期付款手段,增加汽的N售 自1959年以恚c汽N商合作,已服粘^5千f客 目前在40家提供服 Ford Motor Credit 是全球最大的公司l行公司之一。 U展核心知R - know-how and service provider know-how and service provider Technology Licensing R&D Service 提供具有Domain know-how的w服 _l新的Business Model cO涔商策略盟 整S出的Turnkey Contractor Technology Licensing @及know-how的Pc 哪些@及know-how,除了自己用,可以License Out ? @些License Out的@及know-how是否影自己的力? @及know-howM合成用於不同a品、aI或技g的License Package
R&D Service 是否可以f助其他aIO_l客u化的晶片? 例如:t子、raI、金融I、休f服I 提供R&D service 提供具有Domain Know-how的w服 例如:中Y立出沓闪⒅泄谫Y公司 中冠提供的解Q方案c服V榇箨S裼 整wY管理系y i-MEAS
u造IERP i-SEAS
FIERP 企I功能性解Q方案 eMos
O滟Y源管理解Q方案 ePortal
企I入口W站解
正在加载中,请稍后...管理者和工厂
Laravel 有几个 Manager 类,用来管理创建基于驱动的组件。这些类包括缓存、session 、认证和队列组件。管理者类负责基于应用程序的配置建立一个特定的驱动实现。例如,CacheManager 类可以建立 APC 、 Memcached 、文件和各种其他的缓存驱动实现。
这些管理者都拥有 extend 方法,可以简单地用它来注入新的驱动解析功能到管理者。我们将会在下面的例子,随着讲解如何为它们注入自定义驱动支持,涵盖这些管理者的内容。
注意: 建议花点时间来探索 Laravel 附带的各种 Manager 类,例如:CacheManager 和 SessionManager。看过这些类将会让你更彻底了解 Laravel 表面下是如何运作。所有的管理者类继承 IlluminateSupportManager 基础类,它提供一些有用、常见的功能给每一个管理者。
为了扩展 Laravel 缓存功能,我们将会使用 CacheManager 的 extend 方法,这方法可以用来绑定一个自定义驱动解析器到管理者,并且是全部的管理者类通用的。例如,注册一个新的缓存驱动名为「mongo」,我们将执行以下操作:
Cache::extend('mongo', function($app)
return Cache::repository(new MongoStore);
传递到 extend 方法的第一个参数是驱动的名称。这将会对应到你的 config/cache.php 配置文件里的 driver 选项。第二个参数是个应该返回 IlluminateCacheRepository 实例的闭包。 $app 将会被传递到闭包,它是 IlluminateFoundationApplication 和服务容器的实例。
Cache::extend 的调用可以在新的 Laravel 应用程序默认附带的 AppProvidersAppServiceProvider 的 boot 方法中完成,或者你可以建立自己的服务提供者来放置这个扩展 - 记得不要忘记在 config/app.php 的提供者数组注册提供者。
要建立自定义缓存驱动,首先需要实现 IlluminateContractsCacheStore contract 。所以,我们的 MongoDB 缓存实现将会看起来像这样:
class MongoStore implements IlluminateContractsCacheStore {
public function get($key) {}
public function put($key, $value, $minutes) {}
public function increment($key, $value = 1) {}
public function decrement($key, $value = 1) {}
public function forever($key, $value) {}
public function forget($key) {}
public function flush() {}
我们只需要使用 MongoDB 连接来实现这些方法。当实现完成,就可以完成自定义驱动注册:
Cache::extend('mongo', function($app)
return Cache::repository(new MongoStore);
如果你正在考虑要把自定义缓存驱动代码放在哪里,请考虑把它放上 Packagist !或者,你可以在 app 的目录中建立 Extensions 命名空间。记得 Laravel 没有严格的应用程序架构,你可以依照喜好自由的组织应用程序。
自定义 session 驱动来扩展 Laravel 和扩展缓存系统一样简单。我们将会再一次使用 extend 方法来注册自定义代码:
Session::extend('mongo', function($app)
// Return implementation of SessionHandlerInterface
在哪里扩展 Session
你应该把 session 扩展代码放置在 AppServiceProvider 的 boot 方法里。
实现 Session 扩展
要注意我们的自定义缓存驱动应该要实现 SessionHandlerInterface 。这个接口只包含少数需要实现的简单方法。一个基本的 MongoDB 实现会看起来像这样:
class MongoHandler implements SessionHandlerInterface {
public function open($savePath, $sessionName) {}
public function close() {}
public function read($sessionId) {}
public function write($sessionId, $data) {}
public function destroy($sessionId) {}
public function gc($lifetime) {}
因为这些方法不像缓存的 StoreInterface 一样容易理解,让我们快速地看过这些方法做些什么:
open 方法通常会被用在基于文件的 session 保存系统。因为 Laravel 附带一个 file session 驱动,几乎不需要在这个方法放任何东西。你可以让它留空。PHP 要求我们去实现这个方法,事实上明显是个差劲的接口设计 (我们将会晚点讨论它)。
close 方法,就像 open 方法,通常也可以忽略。对大部份的驱动来说,并不需要它。
read 方法应该返回与给定 $sessionId 关联的 session 数据的字串形态。当你的驱动取回或保存 session 数据时不需要做任何序列化或进行其他编码,因为 Laravel 将会为你进行序列化
write 方法应该写入给定 $data 字串与 $sessionId 的关联到一些永久存储系统,例如:MongoDB、 Dynamo、等等。
destroy 方法应该从永久存储移除与 $sessionId 关联的数据。
gc 方法应该销毁所有比给定 $lifetime UNIX 时间戳记还旧的 session 数据。对于会自己过期的系统如 Memcached 和 Redis,这个方法可以留空。
当 SessionHandlerInterface 实现完成,我们准备好要用 Session 管理者注册它:
Session::extend('mongo', function($app)
return new MongoH
当 session 驱动已经被注册,我们可以在 config/session.php 配置文件使用 mongo 驱动。
注意: 记住,如果你写了个自定义 session 处理器,请在 Packagist 分享它!
认证可以用与缓存和 session 功能相同的方法扩展。再一次的,使用我们已经熟悉的 extend 方法:
Auth::extend('riak', function($app)
// 返回 IlluminateContractsAuthUserProvider 的实现
UserProvider 实现只负责从永久存储系统抓取 IlluminateContractsAuthAuthenticatable 实现,存储系统例如: MySQL 、 Riak ,等等。这两个接口让 Laravel 认证机制无论用户数据如何保存或用什么种类的类来代表它都能继续运作。
让我们来看一下 UserProvider contract :
interface UserProvider {
public function retrieveById($identifier);
public function retrieveByToken($identifier, $token);
public function updateRememberToken(Authenticatable $user, $token);
public function retrieveByCredentials(array $credentials);
public function validateCredentials(Authenticatable $user, array $credentials);
retrieveById 函数通常接收一个代表用户的数字键,例如:MySQL 数据库的自动递增 ID。这方法应该取得符合 ID 的 Authenticatable 实现并返回。
retrieveByToken 函数用用户唯一的 $identifier 和保存在 remember_token 字段的「记住我」 $token 来取得用户。跟前面的方法一样,应该返回 Authenticatable 的实现。
updateRememberToken 方法用新的 $token 更新 $user 的 remember_token 字段。新 token 可以是在「记住我」成功地登录时,传入一个新的 token,或当用户注销时传入一个 null。
retrieveByCredentials 方法接收当尝试登录应用程序时,传递到 Auth::attempt 方法的凭证数组。这个方法应该接着「查找」底层使用的永久存储,找到符合凭证的用户。这个方法通常会对 $credentials['username'] 用「 where 」条件查找。 并且应该返回一个 UserInterface 接口的实现。这个方法不应该尝试做任何密码验证或认证。
validateCredentials 方法应该通过比较给定的 $user 与 $credentials 来验证用户。举例来说,这个方法可以比较 $user-&getAuthPassword() 字串跟 Hash::make 后的 $credentials['password']。这个方法应该只验证用户的凭证数组并且返回布尔值。
现在我们已经看过 UserProvider 的每个方法,接着来看一下 Authenticatable。记住,提供者应该从 retrieveById 和 retrieveByCredentials 方法返回这个接口的实现:
interface Authenticatable {
public function getAuthIdentifier();
public function getAuthPassword();
public function getRememberToken();
public function setRememberToken($value);
public function getRememberTokenName();
这个接口很简单。 The getAuthIdentifier 方法应该返回用户的「主键」。在 MySQL 后台,同样,这将会是个自动递增的主键。getAuthPassword 应该返回用户哈希过的密码。这个接口让认证系统可以与任何用户类一起运作,无论你使用什么 ORM 或保存抽象层。默认,Laravel 包含一个实现这个接口的 User 类在 app 文件夹里,所以你可以参考这个类当作实现的例子。
最后,当我们已经实现了 UserProvider,我们准备好用 Auth facade 来注册扩展:
Auth::extend('riak', function($app)
return new RiakUserProvider($app['riak.connection']);
用 extend 方法注册驱动之后,在你的 config/auth.php 配置文件切换到新驱动。
基于服务容器的扩展
几乎每个 Laravel 框架引入的服务提供者都会绑定对象到服务容器中。你可以在 config/app.php 配置文件中找到应用程序的服务提供者清单。如果你有时间,你应该浏览过这里面每一个提供者的源代码。通过这样做,你将会更了解每一个提供者添加什么到框架,以及用什么键值来绑定各种服务到服务容器。
例如, HashServiceProvider 绑定 hash 做为键值到服务容器,它将解析成 IlluminateHashingBcryptHasher 实例。你可以在应用程序中覆写这个 IoC 绑定,轻松地扩展并覆写这个类。例如:
&?php namespace AppP
class SnappyHashProvider extends IlluminateHashingHashServiceProvider {
public function boot()
parent::boot();
$this-&app-&bindShared('hash', function()
return new SnappyHashingScryptH
要注意的是这个类扩展 HashServiceProvider,不是默认的 ServiceProvider 基础类。当你扩展了服务提供者,在 config/app.php 配置文件把 HashServiceProvider 换成你扩展的提供者名称。
这是被绑定在容器的所有核心类的一般扩展方法。实际上,每个以这种方式绑定在容器的核心类都可以被覆写。再次强调,看过每个框架引入的服务提供者将会使你熟悉:每个类被绑在容器的哪里、它们是用什么键值绑定。这是个好方法可以了解更多关于 Laravel 如何结合它们。
Copyright &
All Rights Reserved &&&&&&新人求助魔羽集中射击EX扩展核心怎么用??_龙之谷吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,692,832贴子:
新人求助魔羽集中射击EX扩展核心怎么用??
新人求助魔羽集中射击EX扩展核心怎么用??求大神
本新昨天苦练买了主力舰...
接下来说一下狩猎刺激和...
楼主喜欢把玩,怕掉件,...
看着精品里有各种武器教...
虽然有着不错的伤害,但...
就是你再用迅捷的时候,是在那个核心发射迅捷的六支箭的,不用贴身输出了。当然pk场无效
按住后退键再按迅捷,前提要有迅捷核心
后退和迅捷一起按试试
迅捷箭就会从核心里发出来—— 这是一只高冷的卡巴拉✿
按住s再按技能就好了
我才知道有这么个东西。。。。---------寂寞就先晾着,坚强是种天份。
贴吧热议榜
使用签名档&&
保存至快速回贴2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

 

随机推荐