|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
刚开始觉得自己对这些多少有些基础,很简单,但是看了老师那么熟练的进行网页布局的时候,突然之间发现,其实,我的基础并没有自己想像的那么好,自己设计的页面其实并不好看,就连表格的边框为1像素都不会弄。
上一次我讲到利用主动导入可以完成一个类的延迟加载,这一次我想讲一下设置装备摆设文件。
不晓得人人注重了没有,前几篇文章我都没有触及到设置装备摆设文件,可是在一个项目中,设置装备摆设文件又是比不成少的。
如今假定将Route.php中的默许掌握器和Action变成可设置装备摆设的,怎样弄呢?
咱们利用最复杂的体例:
1 <?php 2 $defaultController = 'Index'; 3 $defaultAction = 'index';
然后在Route.php中include这个文件:
1 <?php 2 include APP_PATH . '/config.php'; 1 $controller = empty($_GET['c']) ? $defaultController : trim($_GET['c']); //设置了默许的掌握器 2 $action = empty($_GET['a']) ? $defaultAction : trim($_GET['a']); //设置了默许的Action 固然也能够利用这类体例:
1 <?php 2 return array( 3 'defaultController' => 'Index', 4 'defaultAction' => 'index' 5 ); 仍是在Route.php中include:
1 <?php 2 $config = include APP_PATH . '/config.php'; 1 $controller= empty($_GET['c']) ? $config['defaultController'] : trim($_GET['c']); //设置了默许的掌握器 2 $action = empty($_GET['a']) ? $config['defaultAction'] : trim($_GET['a']); //设置了默许的Action
然而因为设置装备摆设文件很有能够在全部框架运转进程的各个类都有效到,而前两种体例都只能在某一个类外面的某一个办法中利用,怎样让它在各个类都可使用呢?
咱们可以可使用一个static办法来处理,好比专门界说一个Config类来寄存设置装备摆设信息,Config::get来读取设置装备摆设信息,Config::set来设置设置装备摆设信息,详细做法读者可以本人去测验考试一下。
固然我禁绝备采取这类体例,能够事先我看Thinkphp源码的时分被它优雅的特别函数C迷住了吧,前面我在写Toper的时分也利用了一些特别的函数,而C次要是担任设置和读取设置装备摆设信息,团体概念,面向对象是需要的,然而不是甚么都要面向对象,所以我筹办界说一个function.php来寄存一些私有的函数,我把它称为私有函数库。
因为有了私有函数库,咱们可以将上一篇外面的主动导入(__autoload)也转移到这个文件中,由于在Route.php呈现一段__autoload的代码仍是挺诡异的!!
好了,怎样完成方才咱们说的经由过程一个函数来完成设置装备摆设信息的设置和读取呢?
好了,先展现我在Toper中的完成吧:
01 function C($name = null,$val = null) { 02 static $_config = array(); 03 if(empty($name)) { 04 return $_config; 05 } elseif(is_string($name)) { 06 if(empty($val)) { 07 if(!strpos($name,'=>')) { 08 //一维 09 return isset($_config[$name]) ? $_config[$name] : null; 10 } else { 11 //今朝只撑持二维 12 $name = explode('=>',$name); 13 returnisset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null; 14 } 15 } else { 16 if(!strpos($name,'=>')) { 17 //直接设置 18 $_config[$name] = $val; 19 } else { 20 //设置二维 21 $name = explode('=>',$name); 22 $_config[$name[0]][$name[1]] = $val; 23 } 24 } 25 } elseif(is_array($name)) { 26 foreach($name as $key=>$value) { 27 $_config[$key] = $value; 28 } 29 return ; 30 } else { 31 throw new Exception('参数类型失足'); 32 return ; 33 } 34 }
看着代码挺长的,实践上道理很复杂,假如传递的参数只要一个,那末第二个参数就挪用默许参数,即NULL,再辨认是不是第一个参数是不是是字符串,那末这个函数就辨认为读取,假如第二个参数不为空或第一个参数为数组,那末就辨认为设置!!
因为我本人如今对照懒,并且我用这个函数用的函数蛮随手的,所以在这儿我就直接用这个函数来作为例子了,更多内容可以检查Toper的/Library/Toper/function.php。
好比如今要读取defaultController,那末只需利用C('defaultController')便可,假如要设置,那末利用C('defaultController','Index')!!!
如今咱们只需求在进口文件中导入这个function.php便可:
1 <?php 2 defined('APP_PATH') define('APP_PATH',dirname(__FILE__) . '/..'); 3 defined('FRAMEWORK_PATH') define('FRAMEWORK_PATH',APP_PATH . '/Library/Test'); 4 defined('MODULES_PATH') define('MODULES_PATH',APP_PATH . '/UserApps/Modules'); 5 include FRAMEWORK_PATH . '/function.php'; 6 include FRAMEWORK_PATH . '/Route.php'; 7 Route::run(); 人人能够注重到了,C函数最入手下手的时分,外面没有寄存任何元素,那末咱们怎样停止初始化,将设置装备摆设文件的内容写入C函数呢?
之前咱们将设置装备摆设文件寄存在项目根目次,如许实践上是不合适之前咱们的商定的标准,所以如今讲这个设置装备摆设文件剪切到/UserApps/Configs目次上面,为了更便利的利用这个途径,咱们界说一个CONFIGS_PATH来指向设置装备摆设文件的途径。
如今咱们看看进口文件酿成了甚么样了:
1 <?php 2 defined('APP_PATH') define('APP_PATH',dirname(__FILE__) . '/..'); 3 defined('FRAMEWORK_PATH') define('FRAMEWORK_PATH',APP_PATH . '/Library/Test'); 4 defined('MODULES_PATH') define('MODULES_PATH',APP_PATH . '/UserApps/Modules'); 5 defined('CONFIGS_PATH') define('CONFIGS_PATH',APP_PATH . '/UserApps/Configs'); 6 include FRAMEWORK_PATH . '/function.php'; 7 C(include CONFIGS_PATH . '/config.php'); //写入设置装备摆设信息 8 include FRAMEWORK_PATH . '/Route.php'; 9 Route::run(); 然后咱们修正一下Route.php
01 <?php 02 class Route { 03 public static function run() { 04 $controller= empty($_GET['c']) ? C('defaultController') : trim($_GET['c']); //设置了默许的掌握器 05 $action= empty($_GET['a']) ? C('defaultAction') : trim($_GET['a']); //设置了默许的Action 06 $controllerBasePath = APP_PATH . '/UserApps/Modules/Controllers/'; 07 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; 08 if(is_file($controllerFilePath)) { 09 include $controllerFilePath; 10 $controllerName = $controller . 'Controller'; 11 if(class_exists($controllerName)) { 12 $controllerHandler = new $controllerName(); 13 if(method_exists($controllerHandler,$action)) { 14 $controllerHandler->$action(); 15 } else { 16 echo 'the method does not exists'; 17 } 18 } else { 19 echo 'the class does not exists'; 20 } 21 } else { 22 echo 'controller not exists'; 23 } 24 } 25 } 告诉你了一个方式,但是缺少努力这一环节,那也是白搭。 |
|