php - View 的 Laravel 依赖注入(inject)

标签 php laravel-4

我正在尝试掌握 Laravel 中依赖注入(inject)和 IoC 容器的窍门。

目前我有一个充满静态方法的类,我在我的 View 中使用这些方法。例如

class Templatizer {
    /**
     * Generates a colored FontAwsome check or cross from a true/false argument
     * @param  boolean $bool 
     * @return string       The HTML markup of the icon
     */
    public static function boolicon($bool)
    {
        return $bool ? '<span class="fa fa-check text-success"></span>' : '<span class="fa fa-times text-danger"></span>';
    }
}

我让 composer 自动加载类,在我看来我可以直接使用 {{ Templatizer::boolicon($trueOrFalseValue) }}

显然这是不好的做法,我想放弃使用静态方法。我认为正确的方法是注入(inject) Templatizerinstance 并使用类似 {{ $templatizer->boolicon($v) }}` 的方法。

我将如何构建它?大概我需要通过构造函数将 Templatizer 的实例注入(inject)到我的 Controller 中?例如

class PagesController extends BaseController {

    protected $templatizer;

    public function __construct(Templatizer $templatizer)
    {
        $this->templatizer = $templatizer;
    }
}

然后,比方说,我将实例传递给 View 的索引页方法?例如

# inside PagesController
public function index()
{
    return View::make('pages.index', ['templatizer' => $this->templatizer]);
}

如果这是正确的,那么放置我的 Templatizer 类的合适位置在哪里?我如何将它绑定(bind)到 IoC 容器?

最佳答案

首先,我认为静态调用这些方法没有任何问题。看起来这只是您自己的 HTML 帮助程序类,您应该没问题。

如果您决定使用依赖注入(inject),那么注册您的类的“正确”方法是使用 Service Providers .

按照您编写的方式将其分配给 View 是可行的,但您也可以在需要时通过这种方式获取它:

$templatizer = App::make('Yournamespace\Templatizer');

最后,在您的情况下,最好的解决方案可能是构建您自己的 Facade .

关于php - View 的 Laravel 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544572/

相关文章:

php - 使用sql查询进行间隔日期验证

在 symfony 1.4 中用 mock 进行 PHP 单元测试

php - 如何在 Laravel 中解析 "ErrorException in VerifyCsrfToken.php"

twitter-bootstrap - 在 Laravel 4 中使用 Bootstrap 的最佳方法

php - 类 Carbon\Carbon 未找到

php - Laravel 链接到 Controller

php - Laravel 中 View Composer 和 Creator 的区别?

php - 如何替换整个mysql数据库php中的字符串

php - Laravel 5.2 为每个用户提供单独的表

php - 如何在 Laravel 中正确合并多个集合