1

我正在研究 Laravel CRUD。Laravel Framework 是 6.18.15 我想选择一条记录并更新。

这是照片库。现在,如果我单击其中一张照片,我可以得到以下 URL

https://mywebsite.net/public/edit?id=59

但是在edit.blade.php中我得到了这个错误

未定义变量:id

有人可以教我正确的代码吗?

这些是当前代码

控制器已更新

public function edit(Request $request)
{
  
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

public function editpcs(Request $request)
{
    $this->validate($request, [
        'title' => 'required',
        'image' => 'required|mimes:jpeg,jpg' 
    ]);

    $input['image'] = time().'.'.$request->image->getClientOriginalExtension();

 if($request->hasFile('image')) {

  $image       = $request->file('image');
  $filename    = time().'.'.$request->image->getClientOriginalExtension();
  $image_resize = Image::make($image->getRealPath());              
  $image_resize->resize(1280, null, function ($image) {$image->aspectRatio();});

  $image_resize->save(public_path('images/ServiceImages/' .$filename));
  }
  $request->image->move(public_path('images'), $input['image']);
    $input['title'] = $request->title;
   
   // ImageGallery::update($input);

    $update = DB::table('image_gallery')->where('id', $id)->update( [ 'title' => $request->title, 'image' => $request->image]); 


    return view('edit',compact('images'))->with('sucess','sucessfully updated');

}

网页.php

//edit view
Route::get('edit', 'ImageGalleryController@edit');
Route::post('edit', 'ImageGalleryController@edit');

//edit procces
Route::get('editpcs', 'ImageGalleryController@editpcs');
Route::post('editpcs', 'ImageGalleryController@editpcs');

更新

@if($images->count())
   @foreach($images as $image)   
      <div class='text-center'>
        <small class='text-muted'>{{$image['id']}}/ {{$image['title']}} </small>
      </div>       
   @endforeach
@endif

模型

namespace App;
use Illuminate\Database\Eloquent\Model;
class ImageGallery extends Model
{
    protected $table = 'image_gallery';
    protected $fillable = ['title', 'image'];
}
4

3 回答 3

1

实际上在这里$id真的是未定义的,它将是$request->route('id')orrequest('id')$_GET['id']or $request->input('id')

public function edit(Request $request)
{
    $id = request('id');
    $images = ImageGallery::findOrFail($id); // use findOrFail() id not exist in table, it throw a 404 error
    return view('edit',compact('images'));
}

看看$_GET$_REQUEST超全局变量。以下内容适用于您的示例:

$id = $_GET['id'];
$country = $_GET['country'];

在 laravel 中你可以使用Input::get(), 但Input::get在较新版本的 laravel 中已弃用, 更喜欢$request->input代替Input::get:

$id= $request->input('id');
$country= $request->input('country');
于 2020-07-18T05:59:14.237 回答
0

它看起来像这个功能:

public function edit(Request $request)
{
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

也许应该是这样的?

public function edit(Request $request)
{
    $id = $request->input('id', null);
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

实际上,$id在您尝试将其传递给方法之前,它似乎是未定义的find()。但根据您的 URL,它在$request对象中。所以你需要从那里得到它并进入函数。您可以在docs中阅读有关此方法的信息。

于 2020-07-18T05:34:57.320 回答
0
public function edit(Request $request)
{
    $id = request('id');
    $images = ImageGallery::where('id',$id)->first();

    return view('edit',compact('images'));
}
于 2020-07-18T07:41:21.437 回答