我是一名java开发人员; Laravel 和 PHP 都是新手。我学习了如何在 Laravel 控制器类中定义全局变量并使用它。但它在所有其他函数中返回 null。
我的
$person
中有一个类变量 AddPersInfoController.php
。
我首先在函数中初始化它,因为我需要将此 ID 与数据库的不同表中的每条记录一起保存(由同一控制器中的不同函数处理)。但是当我在提交
form
时尝试在任何其他函数中使用它时,它会返回null
。
初始化函数在
get
路线中调用,如下所示:
路线
web.php
Route::get('/add_all/{persId?}',[AddPersInfoController::class,'add_all'])->name('add_all');
我的
AddPersInfoController.php
控制器
class AddPersInfoController extends Controller
{
private $person ;
public function add_all( int $user_id){
$pers = $this->person = Pers_info::find($user_id);
dd($pers); // This shows all values fetched from Database
.
.
}
在这里,我初始化它并将其复制到局部变量
pers
中,以使用 view
方法和其他一些局部变量将其传递给 compact()
。
在
view
中,我根据需要在其他字段中输入数据,然后使用post
路线保存它们。
在
web.php
Route::post('/add/prom_hist',[AddPersInfoController::class,'addPromHist'])->name('add_prom_hist');
AddPersInfoController.php
控制器
public function addPromHist(Request $request)
{
$this->validate ( $request, [
......
]);
dd($this->person); // This returns null.
$promHist = new Prom_history();
$promHist-> pers_info_id = $this->person->id ; // I have to use it here
$promHist-> date =$request->date ;
上面的函数返回 null。
由于 HTTP 请求的无状态性质,它为您提供 null。
对 Laravel 应用程序的每个 HTTP 请求都是独立处理的。这意味着对于每个请求,都会创建控制器的一个新实例。
您可以做的是创建一个服务类或将该值保存在会话中。例如,
在
add_all
方法中
session(['person_id' => $this->person->id]);
在
addPromHist
方法中
$personId = session('person_id');
$this->person = Pers_info::find($personId);