Не обновлять таблицу категорий в Laravel 5.6? - PullRequest
0 голосов
/ 04 декабря 2018

работа с 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">

но когда я пытаюсь обновить данные, это не обновляет.только обновить на той же странице.нет, любая ошибка

url выглядит следующим образом http://localhost:8000/category/update/21?categoryname=tractorrer&image=&remove=0 //tractorrer is updated category name

как можно решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Есть несколько вещей, касающихся ваших примеров кода.Как только наличие одного метода с именем update для маршрутов GET и PUT.Наверное, не очень хорошая привычка.Тем более, что если это маршрут get, вы ничего не обновляете.Так что уже название метода / описание того, что он делает, неверно.

Но кроме этого, вы ничего не видите, потому что вы не можете использовать method="PUT" в своей форме.Вам нужно использовать method="POST", а затем внутри вашей формы вам нужны эти строки.Один, чтобы сообщить форме, что это запрос на исправление, и другой, чтобы вставить токен csrf.

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

, и я бы обновил ваш маршрут до PATCH, а не PUT.

0 голосов
/ 04 декабря 2018

Во-первых,

Вы устанавливаете 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');
    }
}

Можете ли вы попробовать еще раз с моими директивами.Надеюсь, это поможет вашей проблеме.

0 голосов
/ 04 декабря 2018

Первый.

Вы сбросили весь запрос, как этот, чтобы проверить, содержит ли он categoryname.

dd($request->all());

Если dd делаетне печатайте categoryname значение, тогда, похоже, проблема при отправке запроса.

Тогда.

Попробуйте использовать method="POST" вместо method="PUT" Если вы еще не пробовали.
Я никогда не использовал PUT с отправкой формы до

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...