Извините за плохой заголовок, но я понятия не имел, дать хороший заголовок для моей проблемы.
Я создал пакет с верстаком. И теперь у меня есть посылка. Допустим, 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 здесь. Я больше похож на копию&вставить / попробовать&ошибка «разработчик», но она работает хорошо в большинстве случаев.
Используя «статический» способ, Laravel получает доступ к написанному вами фасаду и создает экземпляр базового класса, а затем вызывает метод для этого экземпляра. Когда вы звоните test
метод с new Mypkg
вы на самом деле создаете фасад класс, а не базовый класс. Этот класс фасадов не имеет test
Метод на это, следовательно, ошибка.
Попробуйте это так:
use Strernd\Mypkg as MypkgActual;
$mypkg = new MypkgActual;
$mypkg->test();
Я считаю, что поскольку ваш фасад и фактическая реализация класса имеют одно и то же точное имя класса, вы столкнулись с конфликтом псевдоклассов с победой системы фасадов Laravel. Вы также можете попробовать изменить название вашего фасада на MypkgFacade
,
Других решений пока нет …