我正在尝试掌握 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) Templatizer
的 instance 并使用类似 {{ $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/