Ларавель | ReflectionException - класс не существует

Я создал пакет в верстаке 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() в каждую точку и не могу найти источник.

Должен ли я добавить что-то в методе предоставления в моем поставщике услуг? Если да, то почему это работало на моей машине без добавления этого?


person Krynble    schedule 26.07.2014    source источник
comment
composer dump-autoload помогает?   -  person Unnawut    schedule 26.07.2014
comment
К сожалению, это не так. Он запускается и показывает мне Running for workbench [krynble/contenter]... но ничего не меняется =/   -  person Krynble    schedule 01.08.2014


Ответы (1)


Изучив журнал раскопок, я обнаружил, что проблема была самой странной из всех: для параметра short_open_tag на локальном компьютере было установлено значение 1, а в моей среде QA — значение 0.

Файл не анализировался (но ошибки не возникало), и я получал сообщение о том, что класс не существует.

person Krynble    schedule 05.08.2014