【问题标题】:Passing the same variable to multiple laravel controller functions将相同的变量传递给多个 laravel 控制器函数
【发布时间】:2019-09-10 15:37:27
【问题描述】:

我正在尝试在 laravel 中创建一个可由两个不同的控制器功能访问的变量。我怎样才能做到这一点。第一个函数从刀片获取一个值,将其存储在一个变量中,然后我想将该变量与值一起传递给另一个控制器函数。例如,以下刀片将 obj_id 传递给控制器​​:

1) 我的刀片:

<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<title>test</title>
</head>
<body>
    <form method='post' action="/hard">
        {{csrf_field()}}
        <br>
        <legend><i> Fill Data </i></legend>
        <br>
        <label>
            OBJECT ID:
            <input name='obj_id' type='text' minlength="8" required="" oninvalid="this.setCustomValidity('8 char at least')">
        </label>
        <br>

        <input type='submit' value="Submit!">
    </form>
    <br>
    <br>

</body>
</html>

2) 我的控制器函数 Roger 正确获取了 obj_id(我已经用 dd 测试了 ot)

public function Roger(Request $p)
{
    $t = $p-> get('obj_id'); //I want $t to be global variable
    //dd($t);
}

3) 然后我想将 $t 传递给同一控制器中的函数 Roger1

public function Roger1()
{
    dd($t);
}

我试图将 $t 声明为全局但没有成功。我对 $this 有点困惑,尝试了几种组合都没有成功。

您能帮忙吗?

【问题讨论】:

  • 从哪里调用 roger1()?

标签: laravel variables controller global laravel-blade


【解决方案1】:

场景#01

如果两个方法都在同一个控制器中并且你的第二个方法在第一个方法中被调用(在同一个调用中),你可以这样做:

class CoolController extends Controller {

    public $var;

    public function first_method(Request $value)
    {
        // Example 1: passing the value as a parameter:
        $this->second_method($value);

        // Example 2: passing the value through a class variable:
        $this->var = $value; // $value: 'some-text'
        $this->third_method();
    }

    public function second_method($value)
    {
        dd($value); // 'some-text'
    }

    public function third_method()
    {
        dd($this->var); // 'some-text';
    }

}

场景#02

现在,如果您想从视图发出请求以在您的第一个方法中设置一个值,然后另一个请求调用您的第二个方法并获取该值“存储”在第一次通话中..您可以使用任何这种方法。为什么?因为这两个调用处于不同的生命周期。

当第一次调用结束时,在第一个方法中分配的值(存储在内存中)将在请求完成时被删除。这就是为什么如果您尝试使用它,您的第二个呼叫将获得 null 值。

要存储临时变量,您有几个路径:

  • 将其存储在数据库中。
  • 将其存储在缓存中。
  • 在进行第二次调用时将该值作为请求参数发送。

【讨论】:

  • 你好 HCK!谢谢你的建议。但是不,第二个方法不会在第一个内部调用。我想在第一种方法中为变量赋值,然后让该变量及其值可用于第二种方法。就像在我的 (2) 和 (3) 代码摘录中一样...
  • @Konstantinos 我也在回答的第二部分回答了这种可能性,请阅读到最后。
  • 我熟悉 laravel 中的数据库使用,我可能会这样做。我认为第三个选项不适合我的代码,但我会检查缓存案例。无论如何,非常感谢。
【解决方案2】:

您可以使用会话来存储变量

public function Roger(Request $p)
{
    $t = $p-> get('obj_id'); //I want $t to be global variable
    $p->session()->put('myvalue', $t);
}

public function Roger1(Request $p)
{
    $p->session()->get('myvalue);
}

https://laravel.com/docs/5.8/session#storing-data

【讨论】:

  • 嗨奥马尔。我遵循了您的代码,但虽然我没有收到错误,但我没有得到我所期望的。我只想拥有一个全局变量,并在一个函数中为其分配一个值,并为其分配一个完全相同的变量值,以便同一控制器中的另一个函数可以访问。
  • 看看这个可能对你有帮助,但正如我在会话中写的那样,商店可能适合你的需求stackoverflow.com/questions/25189427/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2021-12-30
  • 2020-11-30
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多