【问题标题】:Laravel redirect controller to controller empty $this variableLaravel 将控制器重定向到控制器空 $this 变量
【发布时间】:2018-02-15 11:37:57
【问题描述】:

我们想将数据从控制器传递到 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)传递给另一个控制器函数。我们尝试了很多方法来传递数据。在这一刻,我们丢失了我们的 $this 数据,例如 environment 和 person,变量 environment 和 person 存在但为空。

我们尝试过:

  $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->enviroment 之类的数据,但这个变量是空的。

有人知道如何通过中间件填充的变量传递数据吗?

【问题讨论】:

  • 首先在另一个控制器中调用控制器是不好的做法!!

标签: php laravel laravel-5


【解决方案1】:

你可以使用容器的力量

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

只要确保“另一个控制器”有它自己的构造函数,调用父构造函数,你的 'person' 和 'environment' 实例将在该控制器中可用。

<?php

namespace App\Http\Controllers;

class DupeController extends Controller
{
    public function __construct()
    {
        parent::__construct();

        // DO MAGIC
    }

    public function index()
    {
        dd(app('person'));
    }
}

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

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 2013-11-30
    • 2012-10-27
    • 1970-01-01
    • 2014-06-20
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多