penglu3000
(Beihuiguixian)
1
我想自定义一个公用函数能被各控制器使用,比如这个生成目录的函数:
function mkpath($path){
$dirs=array();
$path=preg_replace('/(\/){2,}|(\\\){1,}/','/',$path);
$dirs=explode("/",$path);
$path="";
foreach ($dirs as $element)
{
$path.=$element."/";
if(!is_dir($path)){
if(!mkdir($path,0777)){
return false;
}else{
chmod($path,0777);
}
}
}
return true;
}
当然我可以把它放在每个需要用到的控制器内部,但是这样就违背了yii框架的可重用原则。我查看了手册好像要创建扩展才能被各处程序访问,但是这这只是个小函数没必要弄成扩展这么庞大,请问yii里有没有存放公用函数的位置或者方法?比如我之前用的ci里面有helpers目录。
penglu3000
(Beihuiguixian)
2
我无意中搜到了这个帖子,解决了问题:http://www.yiiframework.com/forum/index.php?/topic/4175-公用函数问题/
就是自定义一个静态类放在components目录下,然后就可以直接调用了,看我的例子:
Tool.php放在components下
<?php
class Tool {
public static function mkpath($path) {
$dirs = array();
$path = preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path);
$dirs = explode("/", $path);
$path = "";
foreach ($dirs as $element) {
$path.=$element . "/";
if (!is_dir($path)) {
if (!mkdir($path, 0777)) {
return false;
} else {
chmod($path, 0777);
}
}
}
return true;
}
public static function test() {
echo('tetts');
}
}
在控制器里面直接使用Tool::test();或Tool::mkpath(‘xx/xx/xx’);即可。
yzxh24
(Yzxh24)
4
-,-直接在index.php里将函数文件includ进来就行了,自己方便就行了,何必去死套模式?
每个框架都有自己的开发规范嘛,要不然的话,不如自己直接裸写代码~
yzxh24
(Yzxh24)
7
每个框架在有他特色的同时肯定有让人别扭的地方,要不然某一个框架早就一统天下了,我们是用框架,不是被框架用,你纠结这种根本不是问题的问题根本没意义。。。。
ning
(Maxspeed40k)
8
遵循规范可以让其他人更加容易理解你的代码。
框架提供了这个方便为什么不用呢?
我觉得
Tools::mkpath($path)
要比
require_once ‘tools.php’;
mkpath($path);
更加简洁优雅