84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
在框架中,全部配置信息 (比如全局 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']中