我正在尝试创建一个变量,可在laravel中使用两个不同的控制器functins进行访问。我怎样才能做到这一点。第一个函数从刀片获取值,将其存储在变量中,然后我要将带有值的变量传递给另一个控制器函数。例如,以下刀片将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有点困惑,并尝试了几种组合,但均未成功。
你能帮忙吗?
答案 0 :(得分:0)
如果两个方法都在同一控制器中并且第二个方法在第一个方法中被调用(在同一调用中),则可以执行以下操作:
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
值的原因。
要存储一个临时变量,您有几个路径:
答案 1 :(得分: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);
}