我们希望将数据从控制器传递到Laravel(框架)中的另一个控制器。在我们的Controller.php中,我们在__construct函数中获得了一个中间件代码,它设置了一个环境和人。
Controller.php中的代码
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->environment = session()->get('environment');
$this->person = session()->get('person');
return $next($request);
});
}
在另一个控制器中,我们将2个参数(请求数据)和(数据的id)传递给另一个控制器函数。我们尝试了许多传递数据的方法。在这一刻我们失去了我们的这个数据,如环境和人,变量环境和人存在但空。
我们试过:
$postController = new \App\Http\Controllers\Publication\Post\IndexController();
$postController->duplicate($request, data_get($publication, 'id'));
或者
app('App\Http\Controllers\Publication\Post\IndexController')->duplicate($request, data_get($publication, 'id'))
在Post \ IndexController @ duplicate中,我们丢失了$ this数据(空)。 我们尝试获取类似$ this->环境的数据,但这些变量是空的。
任何人都知道如何使用中间件填充的变量传递数据?
答案 0 :(得分:0)
您可以使用容器的力量
Controller.php
public function __construct()
{
$this->middleware(function ($request, $next) {
app()->instance('person', session()->get('person'));
app()->instance('environment', session()->get('environment'));
return $next($request);
});
}
在另一个控制器中:
<?php
namespace App\Http\Controllers;
class DupeController extends Controller
{
public function index()
{
dd(app('person'));
}
}
确保&#34;另一个控制器&#34;拥有它自己的构造函数,调用父构造函数,你的那个人#39;和&#39;环境&#39;实例将在该控制器中可用。
<?php
namespace App\Http\Controllers;
class DupeController extends Controller
{
public function __construct()
{
parent::__construct();
// DO MAGIC
}
public function index()
{
dd(app('person'));
}
}
但我必须说实话,这是一种不好的做法。我只想告诉你这样的事情是可能的。尝试使用依赖注入技术向控制器注入服务等另一种方法,并将该服务标记为单例,因此容器将为每个分辨率解析相同的实例(每个请求一个实例)。