如何修复“Undefined variable: gambar (View: C:\xampp\htdocs\apmt\resources\views\upload.blade.php)”错误

3

enter image description here我不明白为什么在foreach循环中gambar变量未定义。我也是PHP Laravel 5.8的新手。

(upload.blade.php)


<table class="table table-bordered table-striped">
    <thead>
        <tr>
            <th width="1%">File</th>
            <th>Keterangan</th>
            <th width="1%">OPSI</th>
        </tr>
    </thead>
    <tbody>

        @foreach ($gambar as $g)`here is the undefined variable`
          <tr>
              <td><img width="150px" src="{{ url('/data_file/'.$g->file) }}"></td>
              <td>{{$g->keterangan}}</td>
              <td><a class="btn btn-danger" href="/upload/hapus/{{ $g->id }}">HAPUS</a></td>
          </tr>
        @endforeach
    </tbody>
</table>

UploadController.php

    public function upload(){
        $gambar = Gambar::get();
        return view('upload',['gambar' => $gambar]);
    }   

    public function proses_upload(Request $request){
        $this->validate($request, [
            'file' => 'required|file|image|mimes:jpeg,png,jpg|max:2048',
            'keterangan' => 'required',
        ]);

        // menyimpan data file yang diupload ke variabel $file
        $file = $request->file('file');

        $nama_file = time()."_".$file->getClientOriginalName();

                // isi dengan nama folder tempat kemana file diupload
        $tujuan_upload = 'data_file';
        $file->move($tujuan_upload,$nama_file);

        Gambar::create([
            'file' => $nama_file,
            'keterangan' => $request->keterangan,
        ]);

        return redirect()->back();
    }

我希望它能从我的文件(data_file)中显示一张图片。我上传的所有图片都可以正常工作,只是不能在表格中显示。


请展示代码而不是图片。 - Zain Farooq
展示你的控制器代码。 - Dilip Hirapara
展示一个控制器代码,其中你定义了 $gambar 变量并传递给指定视图。 - zlatan
请展示控制器代码。 - Jithesh Jose
你能给这个路由起一个名字,在代码中用 redirect()->route('named-route') 来替代 redirect()->back() 吗? - Jithesh Jose
4个回答

1
你在proses_upload函数中没有传递gambar参数,我猜你正在将图像插入到upload.blade.php页面。
public function proses_upload(Request $request){
$this->validate($request, [
    'file' => 'required|file|image|mimes:jpeg,png,jpg|max:2048',
    'keterangan' => 'required',
]);

// menyimpan data file yang diupload ke variabel $file
$file = $request->file('file');

$nama_file = time()."_".$file->getClientOriginalName();

        // isi dengan nama folder tempat kemana file diupload
$tujuan_upload = 'data_file';
$file->move($tujuan_upload,$nama_file);

Gambar::create([
    'file' => $nama_file,
    'keterangan' => $request->keterangan,
]);
$gamber = Gambar::get();
return view('upload',['gambar' => $gambar]);

}

但是这些代码在不同的笔记本电脑上都可以正常运行。而在我的笔记本电脑上,它只会显示未定义的变量。我真的不明白为什么…… - Ragnar Lothbrok
在不同的笔记本电脑上是什么意思? - Zain Farooq
@balamurugana 这可能意味着您在这两个设备上有不同的PHP错误报告设置。 - ceejayoz
@ZainFarooq 这意味着,在另一台笔记本电脑或个人电脑上运行代码是正常的,只有我的笔记本电脑出现了错误。 - Ragnar Lothbrok

0

请编辑您的帖子并将控制器代码放在问题中。 但是在我看来,您的控制器中可能没有正确传递$gambar。 以下步骤可能会有所帮助:

  1. 检查您的控制器,是否已正确传递 $gambar 到您的视图。
  2. 在 Laravel 中,您可以使用 compactwith() 方法来传递变量。

    控制器中的示例:

    $gambar = 'path/to/file/gambar.png'
    return view('index',compact('gambar')) // 它将在 index.blade 中传递 $gambar
    

或者

$gambar = 'path/to/file/gambar.png'
return view('index')->with('gambar',$gambar); // it's also passed $gambar in index.blade

view('upload',['gambar' => $gambar]) 这里将 $gambar 传递到了 index.blade 中,这个已经完成了。请在此处查看 https://laravel.com/docs/5.8/views#passing-data-to-views - Dilip Hirapara
是的,但它仍然是未定义的变量。 - Ragnar Lothbrok
@Laravel 是的,那是另一种方法。 - M. Fahmi Ulul Azmi

0
public function upload()
{
$gambar = Gambar::get();
return view('upload',compact('gambar'));
OR
return viw('upload')->with('gambar',$gambar);
}   

public function proses_upload(Request $request){
$this->validate($request, [
    'file' => 'required|file|image|mimes:jpeg,png,jpg|max:2048',
    'keterangan' => 'required',
]);

// menyimpan data file yang diupload ke variabel $file
$file = $request->file('file');

$nama_file = time()."_".$file->getClientOriginalName();

        // isi dengan nama folder tempat kemana file diupload
$tujuan_upload = 'data_file';
$file->move($tujuan_upload,$nama_file);

Gambar::create([
    'file' => $nama_file,
    'keterangan' => $request->keterangan,
]);

return redirect()->route('upload-view');
} 

In web.php

  Route::get('upload',UploadController@upload)->name('upload-view');

在你看来

  <table class="table table-bordered table-striped">
            <thead>
                <tr>
                    <th width="1%">File</th>
                    <th>Keterangan</th>
                    <th width="1%">OPSI</th>
                </tr>
            </thead>
            <tbody>

                @foreach($gambar as $g)
                <tr>
                    <td><img width="150px" src="{{ url('/data_file/'.$g->file) }}"></td>
                    <td>{{$g->keterangan}}</td>
                    <td><a class="btn btn-danger" href="/upload/hapus/{{ $g->id }}">HAPUS</a></td>
                </tr>
            @endforeach
            </tbody>
        </table>

它仍然是未定义的变量..我已经在web.php中添加了路由 Route::get('/upload', 'UploadController@upload'); Route::post('/upload/proses','UploadController@proses_upload'); - Ragnar Lothbrok

-1
请执行以下操作;
$gambar = Gambar::all();
return view('upload',compact('gambar'));

首先在您的控制器中返回变量,检查它返回了什么值,就像我下面所做的那样,如果它返回了值,则使用:

$gambar = Gambar::all();
return $gambar;

return view('upload',['gambar' => $gambar]);return view('upload',compact('gambar')); 做的是同样的事情。 - ceejayoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接