在框架中,全部配置信息 (比如全局 config.php) 应该注入到控制器还是模型里面?还是其它的什么地方? 比较优雅的方式应该是怎样的? 你们都是如何实现的?
(比如全局 config.php)
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
一般是写成一个config全局函数,然后无论是controller还是model还是其他任何地方,都能拿到config
config
不知道题主是出于什么考虑才问怎么注入的。这个一般是主动获取,而不是配置注入
config.php里定义一个应用的全局数组(哈希表)$app = array();用于存储应用配置,函数和方法中声明global $app;后即可访问这个全局数组.
$app = array();
global $app;
你可以把这个全局哈希表理解为Windows的注册表,程序的各种信息都可以保存在这个全局哈希表中,比如用户这个数据模型具备的权限等:
$app['user']['rbac']['func'] = array( #页面控制器 '/admin/post_index.php', '/admin/post_add.php', '/admin/post_edit.php', '/admin/post_del.php', #函数和类的方法 'app_post_get', 'app_post_add', 'app_post_edit' 'app_post_del', 'app_post::get', 'app_post::add', 'app_post::edit' 'app_post::del', );
权限判断时只需判断这个全局数组的用户rbac元素(节点)中是否存在当前"页面控制器"或"函数方法"即可,比如:
//页面控制器鉴权 if(!in_array('/admin/post_add.php', $app['user']['rbac']['func'], true)) { exit('无访问权限'); } //函数方法鉴权 function app_post_add() { global $app; if(!in_array(__FUNCTION__, $app['user']['rbac']['func'], true)) { return false; //无访问权限 } } class app_post { public function add() { global $app; if(!in_array(__METHOD__, $app['user']['rbac']['func'], true)) { return false; //无访问权限 } } }
这样,设计数据模型,相当于设计数组结构.
最后,PHP7开始可以用define定义常量数组:
define('APP', array(1,2,3));
PHP里"线程总是安全的".因为工作在多线程SAPI下的PHP,是全局线程安全的.而工作在多进程下的PHP,则根本就没有线程这个概念.所以PHP对全局数组的读写不会发生错乱.
一般是由一个单例去持有配置然后注入到各个模块当中的吧
全局的config.php,您用没有用yaconf,没用的话一般的config.php都是一堆常量吧,我一般在引导的时候注入,也就是index.php 来个require_once 'config.php',全局嘛,肯定是这样,至于分开的业务配置我习惯在控制器下再建立config文件夹然后在写几个接口类
config.php
yaconf
index.php
require_once 'config.php'
数据库(缓存)查询到配置信息后保存在$GLOBALES['cfg']中
一般是写成一个
config
全局函数,然后无论是controller还是model还是其他任何地方,都能拿到config不知道题主是出于什么考虑才问怎么注入的。这个一般是主动获取,而不是配置注入
config.php里定义一个应用的全局数组(哈希表)
$app = array();
用于存储应用配置,函数和方法中声明global $app;
后即可访问这个全局数组.你可以把这个全局哈希表理解为Windows的注册表,程序的各种信息都可以保存在这个全局哈希表中,比如用户这个数据模型具备的权限等:
权限判断时只需判断这个全局数组的用户rbac元素(节点)中是否存在当前"页面控制器"或"函数方法"即可,比如:
这样,设计数据模型,相当于设计数组结构.
最后,PHP7开始可以用define定义常量数组:
PHP里"线程总是安全的".
因为工作在多线程SAPI下的PHP,是全局线程安全的.
而工作在多进程下的PHP,则根本就没有线程这个概念.
所以PHP对全局数组的读写不会发生错乱.
一般是由一个单例去持有配置然后注入到各个模块当中的吧
全局的
config.php
,您用没有用yaconf
,没用的话一般的config.php
都是一堆常量吧,我一般在引导的时候注入,也就是index.php
来个require_once 'config.php'
,全局嘛,肯定是这样,至于分开的业务配置我习惯在控制器下再建立config
文件夹然后在写几个接口类数据库(缓存)查询到配置信息后保存在$GLOBALES['cfg']中