【问题标题】:Proper way to deal with class dependency in a custom class in Laravel 4在 Laravel 4 中处理自定义类中的类依赖的正确方法
【发布时间】:2014-09-11 22:51:43
【问题描述】:

我正在向我的 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); 
});

这是我得到的错误:

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

我一开始以为我搞砸了我的命名空间和文件命名,但是 Laravel 可以找到该类,因为我可以执行以下操作而不会出错:

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

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

【问题讨论】:

  • 相当肯定 Laravel 有一个自动加载器
  • 我想我快到了,但是在这个评论中很难证明,所以我想我会提出一个新问题。
  • 您可以随时编辑现有问题

标签: php class oop laravel-4 dependencies


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多