我正在尝试创建一个可由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有点困惑,尝试了几种组合但没有成功。
你能帮忙吗?
您可以使用会话来存储变量
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);
}
如果两个方法都在同一个控制器中,并且第二个方法在第一个方法内调用(在同一个调用中),你可以这样做:
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';
}
}
现在,如果您想从视图中发出请求以在第一个方法中设置值,然后另一个请求调用第二个方法并获取在第一个调用中“存储”的值...那么您可以使用任何这种方法。为什么?因为这两个电话都处于不同的生命周期中。
当第一个呼叫结束时,第一个方法(存储在存储器中)中分配的值将在请求完成时被删除。这就是为什么你的第二次调用将获得null
值,如果你尝试使用它。
要存储临时变量,您有几个路径: