Простая функция разработки пакетов Laravel не работает

Извините за плохой заголовок, но я понятия не имел, дать хороший заголовок для моей проблемы.

Я создал пакет с верстаком. И теперь у меня есть посылка. Допустим, strernd / mypkg
Внутри каталога рабочего места Strernd/Mypkg У меня есть следующий код:
http://laravel.io/bin/oNzoa

Почему Mypkg::test()работа и $mypkg = new Mypkg(); $mypkg->test(); не? (Внутри моего приложения)
Ошибка
Call to undefined method Strernd\Mypkg\Facades\Mypkg::test()Call to undefined method Strernd\Mypkg\Facades\Mypkg::test()

Я думаю, что я не понимаю некоторые основные принципы PHP здесь. Я больше похож на копию&вставить / попробовать&ошибка «разработчик», но она работает хорошо в большинстве случаев.

2

Решение

Используя «статический» способ, Laravel получает доступ к написанному вами фасаду и создает экземпляр базового класса, а затем вызывает метод для этого экземпляра. Когда вы звоните test метод с new Mypkgвы на самом деле создаете фасад класс, а не базовый класс. Этот класс фасадов не имеет test Метод на это, следовательно, ошибка.

Попробуйте это так:

use Strernd\Mypkg as MypkgActual;

$mypkg = new MypkgActual;
$mypkg->test();

Я считаю, что поскольку ваш фасад и фактическая реализация класса имеют одно и то же точное имя класса, вы столкнулись с конфликтом псевдоклассов с победой системы фасадов Laravel. Вы также можете попробовать изменить название вашего фасада на MypkgFacade,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]