先上图:
由于Yaf作者在设计Yaf框架目录时没有直接区分开models文件和controllers文件,所以在IDE看着会很难受,眼睛离开了编辑器就不大好区分这两个文件夹的文件。所以自己写了一个autoload。
PS:也许大大们觉德没有必要,之前用Tp的时候觉得每个文件都得写上长长的后缀很累人,但是现在觉得都没有很有点kanbudashuang:(
由于yaf.name_suffix只能配置类名,对文件名无效,models和controllers下面的文件名都是类名去掉后缀(默认name_suffiix = 1),但是想在目录里很明确的区分开,就把models文件设置成类名的形式。即UserModel.php。
如果不对此做处理,直接改文件名会出现 Class 'UserModel' not found in XXX的相关错误信息,导致500产生。所以我们就自己加载文件,直接上代码
<?php
function autoload ($class_name)
{
$root = APP_PATH . '/application';
$load_path = $root."/models";
$load_file = $load_path."/".$class_name;
if (file_exists($load_file . ".php")) {
require_once $load_file . ".php";
}
else{
$arr_file = array();
tree($arr_file, $load_path);
// var_dump($arr_file);
foreach($arr_file as $path){
if (strstr($class_name, "\\")) {
$class_name = str_ireplace("\\", "/", $class_name);
}
if(strpos($path,$class_name)){
$new_load_file = $load_path."/".$class_name;
if(file_exists($load_path . $path)){
// var_dump($load_path . $path);
require_once $new_load_file . ".php";
}
}
}
}
}
//遍历models文件下的所有文件
function tree(&$arr_file, $directory, $dir_name='')
{
$mydir = dir($directory);
while($file = $mydir->read())
{
if((is_dir("$directory/$file")) AND ($file != ".") AND ($file != ".."))
{
tree($arr_file, "$directory/$file", "$dir_name/$file");
}
else if(($file != ".") AND ($file != ".."))
{
$arr_file[] = "$dir_name/$file";
}
}
$mydir->close();
}