将相同的变量传递给多个laravel控制器功能

问题描述 投票:0回答:2

我正在尝试创建一个可由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有点困惑,尝试了几种组合但没有成功。

你能帮忙吗?

laravel variables controller global laravel-blade
2个回答
0
投票

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

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


0
投票

Scenatio #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';
    }

}

Scenatio #02

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

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

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

  • 将其存储在数据库中。
  • 将其存储在缓存中。
  • 在执行第二次调用时将值作为请求参数发送。
© www.soinside.com 2019 - 2024. All rights reserved.