Laravel:控制器类全局变量在类函数中返回 null

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

我是一名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。

php laravel laravel-blade php-8.2
1个回答
0
投票

由于 HTTP 请求的无状态性质,它为您提供 null。

对 Laravel 应用程序的每个 HTTP 请求都是独立处理的。这意味着对于每个请求,都会创建控制器的一个新实例。

您可以做的是创建一个服务类或将该值保存在会话中。例如,

add_all
方法中

session(['person_id' => $this->person->id]);

addPromHist
方法中

$personId = session('person_id');
$this->person = Pers_info::find($personId);
© www.soinside.com 2019 - 2024. All rights reserved.