Laravel:从新的自定义目录加载自定义类

时间:2014-12-17 09:00:44

标签: laravel-4

我目前在我的应用目录中为我的所有图书馆添加了一个新文件夹'。我一直收到一个错误,即没有找到班级,这就是我的工作:

我已将其添加到autoload值中的composer.json文件中:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/services",
        "app/facades",
        "app/libraries" --> here
    ]
},

将其添加到classloader中的global.php文件中:

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/libraries', --> here

));

在app.php中为它创建了一个别名:

'aliases' => array(

    'App'               => 'Illuminate\Support\Facades\App',
    'Session'           => 'Illuminate\Support\Facades\Session',
    ...
    'SimpleImage'       => 'App\Libraries\abeautifulsite\SimpleImage', --> here

),

在我的控制器中调用了这个类:

$img = new SimpleImage($file);

我一直收到的错误是找不到该类。我错过了什么?

ErrorException (E_UNKNOWN) 
Class 'App\Libraries\abeautifulsite\SimpleImage' not found

(PS。我在终端做了composer dump-autoload)

1 个答案:

答案 0 :(得分:5)

在Laravel项目中添加自定义文件夹的最佳方法是使用PSR-4

首先在/app中创建自定义目录,例如:

/app/YourName/libraries

现在打开composer.json并在autoload -> classmap添加psr-4结构之后:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/services",
        "app/facades"
    ],
    "psr-4": {
        "YourName\\": "app/YourName"
    }
},

请注意,我删除了您的/app/libraries行,然后运行:

composer dump-autoload

这样,您将在 YourName 文件夹中添加的所有文件夹都将被加载。

例如:

app/ChristianGiupponi/libraries

"psr-4": {
    "ChristianGiupponi\\": "app/ChristianGiupponi"
 }