2
我试图用laravel类来实现全局函数,我的继承人的形式给出:全局类无法识别laravel
创建一个新类:app/libraries/regex.class.php
:
class Regex{
public static function isUsername($username){
$regex = "/^[a-zA-Z0-9_]+$/";
if (preg_match($regex, $username))
return true;
else
return false;
}
}
添加新的库文件夹app/start/global.php
:
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/libraries',
));
然后使用该函数在一个通过一个路径称为视图:
if(Regex::isUsername($_REQUEST['username'])==true){
echo "<br><br>did it";
}
else{
echo "<br><br>failed it";
}
如果我把isUsername()
函数放在视图的顶部,我使用它的工作很好,但试图使它全局抛出错误。但是我得到:Class 'Regex' not found
在视图中,我尝试使用它。显然它没有得到类,但我不明白为什么?
编辑:我能得到它通过增加require app_path().'/libraries/regex.class.php';
全球文件的结尾工作,现在的工作,但我还是想知道为什么在自动装填没有工作,原来atempt
完美工作。我不赞成laravel在这里强制执行的命名约定。 beech加入到composer.json的推理是什么?它的工作原理没有这样做,只是试图弄清楚目前laravel的怪癖。 – Halter
当你运行composer时,它会创建一个autoload_classmap.php文件,它将一个索引映射到它们定义的文件中。这与Laravel的类加载器不同,它可以找到你的类,不管你命名文件,但是你需要Laravel的类加载器也能够找到它。我不确定确切的机制(只是足以解决问题),但我认为Laravel类加载器速度较慢,并且在您每次更改文件而不运行作曲者时都会作为备份。 global.php中的评论暗示了这种情况。 –