laravel 使用或运算符时对null调用成员函数extension()

kkih6yb8  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(138)

所以,我有两个条件,我 Package 使用如果与“或”操作符。以前它的工作很好使用“和”操作符,但当我只更新一个文件上传它不运行,但如果两个文件上传的更新是成功的。为了弥补缺点,我想用“或”操作符替换它,但它是一个错误。
我的代码,

if (Request()->sampul or Request()->buku <> "") {
        //upload gambar/foto dan buku
        $file = Request()->sampul;
        $fileName = Request()->slug . '.' . $file->extension(); //rename nama berdasarkan slug
        $file->move(public_path('file_buku'), $fileName);

        $file1 = Request()->buku;
        $fileName1 = Request()->nama . '.' . $file1->extension(); //rename nama berdasarkan nama
        $file1->move(public_path('file_buku'), $fileName1);

        $data = [
            'nama' => Request()->nama,
            'slug' => Request()->slug,
            'created_at' => Request()->created_at,
            'sampul' => $fileName,
            'buku' => $fileName1
        ]; 
        $this->BukuModel->editData($id_buku, $data);
    } else {
        //Jika tidak ingin ganti sampul dan buku
        $data = [
            'nama' => Request()->nama,
            'slug' => Request()->slug,
            'created_at' => Request()->created_at
        ];
        $this->BukuModel->editData($id_buku, $data);
    }
ecbunoof

ecbunoof1#

if (Request()->sampul or Request()->buku <> "") {
    //upload gambar/foto dan buku
    $file = Request()->sampul; //THIS IS NULL 
    $fileName = Request()->slug . '.' . $file->extension(); //

你的代码所做的是运行if块,如果sampul或buku的任何非空数据不是“”。所以,如果这两个条件中的任何一个通过,那么if块将运行。
您的Request()->buku <> ""条件已通过,这意味着Request()->sampul为空。

$file = Request()->sampul; //THIS IS NULL 
$fileName = Request()->slug . '.' . $file->extension(); //

现在,在这个代码块中,您试图从null/empty值访问extension(),所以您得到了这个错误。
您的代码应该如下所示:

if (Request()->sampul || Request()->buku !== "") {
            //upload gambar/foto dan buku
            if (Request()->sampul) {
                $file     = Request()->sampul;
                $fileName = Request()->slug.'.'.$file->extension(); //rename nama berdasarkan slug
                $file->move(public_path('file_buku'), $fileName);
            }

            if (Request()->buku) {
                $file1     = Request()->buku;
                $fileName1 = Request()->nama.'.'.$file1->extension(); //rename nama berdasarkan nama
                $file1->move(public_path('file_buku'), $fileName1);
            }

            $data = [
                'nama'       => Request()->nama,
                'slug'       => Request()->slug,
                'created_at' => Request()->created_at,
                'sampul'     => $fileName,
                'buku'       => $fileName1
            ];
        } else {
            //Jika tidak ingin ganti sampul dan buku
            $data = [
                'nama'       => Request()->nama,
                'slug'       => Request()->slug,
                'created_at' => Request()->created_at
            ];
        }
        $this->BukuModel->editData($id_buku, $data);

另外,使用orand不是一个好的做法。请尝试使用||和“&&”。

相关问题