Laravel将控制器重定向到控制器空$ this变量

时间:2018-02-15 11:37:57

标签: php laravel laravel-5

我们希望将数据从控制器传递到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->环境的数据,但这些变量是空的。

任何人都知道如何使用中间件填充的变量传递数据?

1 个答案:

答案 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'));
    }
}

但我必须说实话,这是一种不好的做法。我只想告诉你这样的事情是可能的。尝试使用依赖注入技术向控制器注入服务等另一种方法,并将该服务标记为单例,因此容器将为每个分辨率解析相同的实例(每个请求一个实例)。