在Laravel 4中处理自定义类中的类依赖的正确方法

时间:2014-07-21 12:22:17

标签: php class oop laravel-4 dependencies

我在Laravel库中添加了一个自定义类,似乎非常接近成功。继承了我到目前为止所做的事情,接着是我得到的错误:

我的班级名为连接器,位于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); 
});

这是我得到的错误:

  

传递给Acme \ Api \ Zurmo \ Connector :: __ construct()的参数1必须是   Acme \ Api \ Rest \ ApiRestHelper的一个实例,没有给出

我首先假设我已经搞砸了我的命名空间,但是Laravel可以找到这个类,因为我可以做到以下情况而不会出错:

$rest = new Acme\Api\Rest\ApiRestHelper;
var_dump($rest);

我在这里缺少什么想法?谢谢。

1 个答案:

答案 0 :(得分:0)

构造函数希望您传入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