2014-09-25 25 views
2

对不起,我不知道为我的问题提供一个好的标题。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的一些基本原理。我更像是一个复制&粘贴/尝试&错误“开发人员”,但它在大多数情况下运行良好。

回答

0

当使用'静态'方式时,Laravel正在访问您编写的门面并实例化基础类,然后调用该实例的方法。当您使用new Mypkg调用test方法时,实际上您正在实例化门面类,而不是基础类。该外观类没有test方法,因此错误。

试试这样说:

use Strernd\Mypkg as MypkgActual; 

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

相信,因为你的外观和实际的类实现具有相同的确切类的名字,你在与Laravel的外立面系统伪类名称冲突运行胜出。您也可以尝试将您的立面名称更改为MypkgFacade

+0

似乎没有为我工作︰'类'Strernd \ Mypkg'找不到' 有没有一种漂亮的方式来做到这一点? – Strernd 2014-09-25 15:05:57

+0

请参阅[此问题]的答案(http://stackoverflow.com/q/18499393/697370)。您可能需要从'workbench/[vendor]/[package]'目录内运行'composer install'。 – 2014-09-25 15:17:23

+0

也不起作用。这会是一个解决方案,在我的包中创建另一个类,比如'Car',然后使用类似'$ car = Mypkg :: makecar()'的东西。那么我会得到一个Car实例,不是吗? – Strernd 2014-09-25 15:43:54