Laravel 5.1>在视图中使用@inject来显示内容

时间:2015-06-20 20:56:19

标签: php laravel-5 inject

我正在开发一个小型Web应用程序,它将拥有一个私人消息系统。当用户签名时,他接收或写入的消息将显示在下拉菜单中的工具栏区域中。没什么新的: - )

当用户浏览页面时,工具栏将在大多数时间显示。因此,不是将收件箱实现注入到可能通过routes.php调用的每个控制器中,而是考虑使用新的刀片函数@inject。

这看起来像这样(抽象)

  1. 工具栏视图通过@inject
  2. 调用ControllerMethod
  3. ControllerMethod调用注入的InterfaceMethod(基于构造函数的注入)
  4. 服务容器服务实施
  5. ImplementationMethod返回收件箱
  6. 但我不确定这是否是一个不错的设计模式,因为我对一般的依赖注入相对较新。我很欣赏一些。

1 个答案:

答案 0 :(得分:0)

这里有两件事我不对。

1)Laravel的@Inject视图指令实际上并没有进行任何类型的依赖注入"尽管它的名字暗示如此。它实际上是使用服务位置,这种模式被广泛认为是反模式的。

基本上,通过@Inject,视图可以访问容器中的任何内容。它可以获得想要的任何东西。它没有被告知应该有什么。这是依赖注入和服务位置之间的主要区别。

2)直接将视图注入视图无疑意味着您为应用程序添加了更多复杂性,因为您已经添加了更多将 服务注入模板的位置。虽然它可能使事情看起来更快更简单,但是长期来看会使事情变得更加困难。

3)如果您的视图中发生了这种情况,您将如何测试如何获取和控制数据?您可能不得不使用功能测试,虽然这不是一件坏事,但仍然不会像单元测试那样有用。

我建议坚持通常关于DI的事情,并实际使用DI。