2014-07-13 53 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中的評論暗示了這種情況。 –