gpt4 book ai didi

php - 拉维尔 5 : Controller Inter-Communication and Instantiation

转载 作者:可可西里 更新时间:2023-11-01 01:00:30 27 4
gpt4 key购买 nike

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

基本上我能够在一个 Controller 中实例化另一个 Controller 并将一些值传递给它,例如产品数组,然后将对 Controller 的引用注入(inject)我的 View 并在我需要时通过发出以下命令呈现它:$controllerReference->渲染();

这在很多情况下都很有用,例如。如果我有一个负责呈现目录的 Controller ,我会向它传递一个数组,其中包含我想看到的所有项目,它会进行分页并自行显示项目...

例子:

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

// 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(之前加载的 View ):

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

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

谢谢。

最佳答案

这是我将如何做到这一点,它只有在被调用的 Controller 方法返回一个 View 对象时才有效,如 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 扩展的 Controller.php 类在其中创建一个通用方法:

  1. 获取 Controller 实例
  2. 用x个参数调用正确的方法
  3. 如果是 View 类则返回呈现的内容或抛出异常(例如)

关于php - 拉维尔 5 : Controller Inter-Communication and Instantiation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com