我正在向我的Laravel库添加一个自定义类,并且似乎非常接近成功。下面是我到目前为止所做的,然后是我得到的错误:
我的类名为Connector,位于Acme/Api/Zurmo/Connector
这个类需要另一个类,所以这是它的代码:
use Acme'Api'Rest'ApiRestHelper;
class Connector implements ConnectorInterface {
protected $rest;
public function __construct(ApiRestHelper $rest)
{
$this->rest = $rest;
}
和ApiRestHelper类是这样开始的:
namespace Acme'Api'Rest;
class ApiRestHelper {
然后我刚刚在routes.php中添加了一个快速闭包来测试它是否有效,(它没有):
Route::get('/', function()
{
$connector = new Acme'Api'Zurmo'Connector;
var_dump($connector);
});
这是我得到的错误:
参数1传递给Acme'Api'Zurmo'Connector::__construct()必须是一个Acme'Api'Rest'ApiRestHelper的实例,none given
我首先假设我搞砸了我的命名空间,文件命名,但Laravel可以找到类,因为我可以做以下事情而不会出错:
$rest = new Acme'Api'Rest'ApiRestHelper;
var_dump($rest);
你知道我错过了什么吗?谢谢你。
构造函数期望您传入一个resthelper实例:
//manual dependency injection
Route::get('/', function()
{
$connector = new Acme'Api'Zurmo'Connector(new Acme'Api'Rest'ApiRestHelper);
var_dump($connector);
});
或者改变构造函数
//creates a hard dependency
use Acme'Api'Rest'ApiRestHelper;
class Connector implements ConnectorInterface {
protected $rest;
public function __construct()
{
$this->rest = new ApiRestHelper();
}
}
一个更高级的选择是使用IOC容器进行依赖注入,但那超出了这个答案的范围
http://laravel.com/docs/ioc