Подтвердить что ты не робот

Как автозагрузить "библиотеки" в laravel 4?

Я создал папку с библиотекой в ​​папке приложения, чтобы добавить свои библиотеки приложений. Я обновил конфигурационный файл приложения и composer.json для автоматической загрузки этой папки, но когда я запускаю команду composer dump-autoload, я получаю следующую ошибку:

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'App\\Libraries\\Search\\SearchServiceProvider' not found","file":"D:\\Users\\Miguel Borges\\Documents\\Trabalhos\\Tese\\portal\\bootstrap\\compiled.php","line":4130}}PHP Fatal error: Class 'App\Libraries\Search\SearchServiceProvider' not found in D:\Users\Miguel Borges\Documents\Trabalhos\Tese\portal\bootstrap\compiled.php on line 4130 [Finished in 1.1s with exit code 255]

Дерево папок моих приложений

app
| ...
+ libraries
| + search
| | - Search.php
| | - SearchFacade.php
| | - SearchServiceProvider.php
| + lib2
| | - ...
| + lib3
| | - ...
| | - Theme.php
| - ...
- filters.php
- routes.php

SearchServiceProvider.php

namespace App\Libraries\Search;

use Illuminate\Support\ServiceProvider;

class SearchServiceProvider extends ServiceProvider {

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app['search'] = $this->app->share(function($app)
        {
            return new Search;
        });
    }

}

composer.json

    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/libraries",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ]
        // ,
  //       "psr-0": {
  //           "app": "app/libraries"
  //       }
    },

В принципе, мне нужно автозагрузить все библиотеки в папке "библиотеки".

4b9b3361

Ответ 1

Вам следует создать пространство имен верхнего уровня для вашего приложения.

Затем поместите все библиотеки, которые вы кодируете под этим пространством имен. Примечание. Любые сторонние библиотеки должны (надеюсь) быть установлены через Composer и, следовательно, иметь собственную установку пространства имен/автозагрузки.

Ваша структура каталогов будет следующей:

libraries
    Myapp
        Search (note directory is capitalized)
            Search.php
            SearchFacade.php
            SearchServiceProvider.php
        AnotherLib

Затем ваши классы будут следовать за этим пространством имен:

Файл: Myapp/Search/Search.php:

<?php namespace Myapp\Search;

class Search { ... }

И, наконец, ваша установка для автоматической загрузки:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/libraries",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
    ,
    "psr-0": {
         "Myapp": "app/libraries"
    }
},