2014-07-13 36 views
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

回答

1

你应该根据它所包含的类命名文件,所以在这种情况下,它应该被命名为Regex.php。 Laravel类加载器以这种方式查找文件中的类。

您还应该确保已将库文件夹添加到composer.json中的autoload.classmap部分。

+0

完美工作。我不赞成laravel在这里强制执行的命名约定。 beech加入到composer.json的推理是什么?它的工作原理没有这样做,只是试图弄清楚目前laravel的怪癖。 – Halter

+0

当你运行composer时,它会创建一个autoload_classmap.php文件,它将一个索引映射到它们定义的文件中。这与Laravel的类加载器不同,它可以找到你的类,不管你命名文件,但是你需要Laravel的类加载器也能够找到它。我不确定确切的机制(只是足以解决问题),但我认为Laravel类加载器速度较慢,并且在您每次更改文件而不运行作曲者时都会作为备份。 global.php中的评论暗示了这种情况。 –