【问题标题】:Not update categories table in Laravel 5.6?不更新 Laravel 5.6 中的类别表?
【发布时间】:2019-05-05 13:03:59
【问题描述】:

使用 Laravel 5.6 和 MySQL。我要使用以下控制器函数更新类别表中的类别名称和图像?

public function update(Request $request, $id)
{

    if ($request->isMethod('get'))
        return view('categories.form', ['image' => Category::find($id)]);

    else {
        $rules = [
            'categoryname' => 'required',
        ];
        $this->validate($request, $rules);
        $image = Category::find($id);
        if ($request->hasFile('image')) {
            $dir = 'images/';
            if ($image->image != '' && File::exists($dir . $image->image))
                File::delete($dir . $image->image);
            $extension = strtolower($request->file('image')->getClientOriginalExtension());
            $fileName = str_random() . '.' . $extension;
            $request->file('image')->move($dir, $fileName);
            $image->categoryimage = $fileName;
        } elseif ($request->remove == 1 && File::exists('images/' . $image->image)) {
            File::delete('images/' . $image->post_image);
            $image->categoryimage = null;
        }
    }
    $image->categoryname = $request->categoryname;
    $image->save();
    return redirect()->route('categories.index');
}

和路线

Route::match(['get', 'put'], 'category/update/{id}', 'CategoryController@update');

和编辑表格

@if(isset($image))
        <form method="PUT" action="http://localhost:8000/category/update/{{$image->id}}" enctype="multipart/form-data">

        <input type="hidden" name="_method" value="put">

<label for="description" class="col-form-label col-md-3 col-lg-2">Description</label>
                <div class="col-md-8">
                    <input class="form-control" autofocus placeholder="Description" name="categoryname" type="text" id="categoryname" value="{{ isset($image) ? $image->categoryname : '' }}">



 <label for="image" class="col-form-label col-md-3">Image</label>
                    <div class="col-md-5">
                        <img id="preview"
                             src="{{asset((isset($image) && $image->categoryimage!='')?'images/'.$image->categoryimage:'images/noimage.png')}}"
                             height="200px" width="200px"/>
                        <input class="form-control" style="display:none" name="image" type="file" id="image" name="_token" value="{{ csrf_token() }}">
                        <br/>
                        <a href="javascript:changeProfile();">Add Image</a> |
                        <a style="color: red" href="javascript:removeImage()">Remove</a>
                        <input type="hidden" style="display: none" value="0" name="remove" id="remove">

但是当我尝试更新数据时,它并没有更新。只刷新到同一页面。不,任何错误

网址看起来像这样 http://localhost:8000/category/update/21?categoryname=tractorrer&amp;image=&amp;remove=0 //tractorrer is updated category name

如何解决这个问题?

【问题讨论】:

标签: php mysql laravel-5


【解决方案1】:

首先。

你有没有像这样转储所有请求以检查它是否包含categoryname

dd($request-&gt;all());

如果dd 没有打印categoryname 值,那么这似乎是您发送请求时的问题。

那么。

如果您还没有尝试,请尝试使用method="POST" 而不是method="PUT"
我之前从未使用PUT 提交表单

【讨论】:

  • 然后,检查您将参数发送到控制器的方式。尝试使用 POST 而不是 PUT。如果有帮助,请不要忘记提供反馈并投票!
【解决方案2】:

首先,

你设置了 POST 而不是表单方法的 PUT。

第二,

您的代码看起来有点乱。我更新了你的操作代码;

public function update(Request $request, $id)
{

    if ($request->isMethod('get')){
        return view('categories.form', ['image' => Category::find($id)]);
    } else{

        $rules = [
              'categoryname' => 'required',
        ];

        $this->validate($request, $rules);
        $image = Category::find($id);

        if ($request->hasFile('image')) {
            $dir = 'images/';
            if ($image->image != '' && File::exists($dir . $image->image))
                File::delete($dir . $image->image);
            $extension = strtolower($request->file('image')->getClientOriginalExtension());
            $fileName = str_random() . '.' . $extension;
            $request->file('image')->move($dir, $fileName);
            $image->categoryimage = $fileName;
        } elseif ($request->remove == 1 && File::exists('images/' . $image->image)) 
        {
            File::delete('images/' . $image->post_image);
            $image->categoryimage = null;
        }

        $image->categoryname = $request->categoryname;
        $image->save();
        return redirect()->route('categories.index');
    }
}

你能用我的指令再试一次吗?希望对您的问题有所帮助。

【讨论】:

    【解决方案3】:

    关于您的代码示例有几件事。就像对于 GET 和 PUT 路由只有一个名为 update 的方法。可能不是一个好习惯养成。特别是因为,如果它是一条获取路线,则您不会更新任何内容。所以它的方法名称/描述已经是错误的了。

    但除此之外,您什么也看不到,因为您不能在表单上使用method="PUT"。您需要使用method="POST",然后在您的表单中,您需要这些行。一个告诉表单这是一个补丁请求,另一个是放入 csrf 令牌。

    {{csrf_field()}}
    {{ method_field('PATCH') }}
    

    我会将您的路线更新到 PATCH,而不是 PUT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2019-02-01
      • 2023-04-04
      • 2018-11-23
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多