【问题标题】:Laravel 5: Controller Inter-Communication and InstantiationLaravel 5:控制器间通信和实例化
【发布时间】:2017-06-18 18:59:50
【问题描述】:

在过去,我使用了一个专有框架,该框架有点遵循类似于 View Controller 的 Objective-C 方案。

基本上,我能够在一个控制器中实例化另一个控制器并将一些值传递给它,例如产品数组,然后将控制器的引用注入到我的视图中,并在我想要的任何时候通过发出:$controllerReference->render();

这在许多情况下可能很有用,例如。如果我有一个负责渲染目录的控制器,我只需将一个包含我想查看的所有项目的数组传递给它,它会进行分页并自行显示项目......

例子:

在\UI\Homepage\Controller.php(负责主页的控制器):

// Instantiate a ProductDisplay Controller
$controllRef = new \UI\ProductDisplay\Controller();
$controllRef->setProducts( ... ); // Inject the product array

// Load the current view for this controller and pass it a reference for the ProductDisplay controller
$this->loadSelfView(["controllRef" => $controllRef]);

在\UI\Homepage\View.php(之前加载的视图):

// some html of the view
$controllRef->render(); // Render the ProductDisplay view here!
// some other html

这个功能应该如何在 Laravel 中实现?从我一直在阅读的内容来看,Laravel 试图避免这种行为,为什么?有什么解决办法?

谢谢。

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:

我将这样做,只有当被调用的控制器方法返回像return view('home');这样的视图对象时才有效:

// Get the controller class from the IOC container
$myController= \App::make(MyController::class); 

// Execute the controller method (which return a View object)
$view = $myController->myControllerMethod($someParams); 

// Return the View html content
$html = $view->render(); 

您可以使用所有其他控制器扩展的 Controller.php 类在其中创建一个通用方法:

  1. 获取控制器实例
  2. 使用 x 参数调用正确的方法
  3. 如果是视图类,则返回呈现的内容或抛出异常(例如)

【讨论】:

  • 所以......我想没有一个干净的方法来处理这个......感谢您的回复。
【解决方案2】:

在最新版本的 Laravel 中,可以使用 Blade 的 @inject 指令。它的主要目的似乎是注入服务,但我成功注入了控制器操作。

这里有一个关于你必须做什么的 sn-p:

@inject('productController', 'App\Http\Controllers\ProductController')
{!! $productController->index() !!}

请记住:由于您是直接调用控制器方法,而不是通过路由器,因此您必须传递所有必需的参数。如果该操作需要请求实例,您可以这样调用它:

{!! $productController->index(request()) !!}

可能被调用操作返回的视图包含 HTML 代码。将方法调用包装在{!!!!} 中很重要。使用常规的{{ }} 标签会导致 HTML 代码被模板引擎转义。

【讨论】:

    猜你喜欢
    • 2015-01-08
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多