Я создал пакет в верстаке Laravel 4, и он прекрасно работал на моей машине. Все загружено, как и ожидалось, но теперь на другой машине я получаю исключение Class not found.
Что я имею:
composer.json (корень)
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"workbench"
],
"files": [
"app/helpers.php"
]
},
Обратите внимание, что указан каталог рабочей среды.
Внутри каталога workbench у меня есть папки поставщика и пакета: workbench/krynble/contenter
Внутри находится обычная структура пакета, но самое главное, что есть еще один файл composer.json (созданный при создании пакета):
"autoload": {
"classmap": [
"src/migrations"
],
"psr-0": {
"Krynble\\Contenter\\": "src/"
}
},
Итак, внутри него я выполнил шаги по созданию поставщика услуг, указанного в документации.
workbench/krynble/contenter/src/Krynble/Contenter/ContenterSerivceProvider.php (также сгенерированный автоматически) и оставил его как созданный, только с методом загрузки следующим образом:
public function boot()
{
$this->package('krynble/contenter');
}
регистр:
public function register()
{
//
}
обеспечивает:
public function provides()
{
return array();
}
Добавил этого поставщика услуг в мой app.php в списке поставщиков, и вызов die() в функции загрузки показывает, что он вызывается.
Наконец, я создал свой служебный класс:
workbench/krynble/contenter/src/Krynble/Contenter/Services/Mappers/MediaMapperSerivce.php
<?
namespace Krynble\Contenter\Services\Mappers;
class MediaMapperService {
...
}
Наконец, в моем контроллере:
<?php
use Krynble\Contenter\Services\Mappers\MediaMapperService;
class MediaController extends BaseController {
private $mediaMapperService;
public function __construct(MediaMapperService $mediaMapperService)
{
$this->mediaMapperService = $mediaMapperService;
}
Хороший! Это сработало на моей машине (vagrant box с ubuntu)! Но на ноутбуке Mac это не работает (поэтому я отбросил чувствительность к регистру).
Любые подсказки? Любой способ отладки? Я схожу с ума, бросаю die() в каждую точку и не могу найти источник.
Должен ли я добавить что-то в методе предоставления в моем поставщике услуг? Если да, то почему это работало на моей машине без добавления этого?
composer dump-autoload
помогает? - person Unnawut   schedule 26.07.2014