Laravel: CRUD обновить форму - PullRequest
       1

Laravel: CRUD обновить форму

0 голосов
/ 29 октября 2018

Я действительно хочу научиться обновлять мои данные на Laravel. Я могу восстановить идентификатор с информацией из записи, но когда я изменяю несколько элементов в моей форме, и это я подтверждаю.

У меня проблема с Illuminate \ Routing \ RouteCollection methodNotAllowed сообщение об ошибке Auth :: rout (); маршрут :: ресурс ( 'ученик', 'AdminController');

Мой уровень пока не спешит понять проблему ... Что мне делать?

Для информации вот мой код

У меня есть файл с именем AdminController

class AdminController extends Controller
{
    public function index()
    {
      $students = Student::paginate(5);
      return view('student.index', compact('students'))
             ->with('i', (request()->input('page',1)-1)*5);
    }

    public function create()
    {
        return view('student.create');

    }

    public function store(Request $request)
    {
        $request->validate([
                'firstname' => 'required',
                'lastname' => 'required'
        ]);

        Student::create($request->all());
        return redirect()->route('student.index')
                    ->with('success', 'save');
    }

    public function edit($id)
    {
        $student = Student::find($id);
        return view('student.edit', compact('student'));

    }

    public function update(Request $request, $id)
    {
        $request->validate([
                'firstname' => 'required',
                'lastname' => 'required'
        ]);

        $student = Student::find($id);
        $student->firstname = $request->get('firstname');
        $student->lastname = $request->get('lastname');
        $student->save();

        return redirect()->route('student.index')
                  ->with('success', 'updated successfully');

    }

}

В представлении у меня есть папка nammed Студент с 2 файлами

index.blade.php

@section('content')
      <div class="px-content">
        <div class="page-header">
            <div class="row">
                <div class="col-md-4 text-xs-center text-md-left text-nowrap">
                    <h1>
                        <i class="px-nav-icon ion-android-apps"></i>List
                    </h1>
                </div>

                <hr class="page-wide-block visible-xs visible-sm">
                <!-- Spacer -->
                <div class="m-b-2 visible-xs visible-sm clearfix"></div>
            </div>
        </div>
        <div class="row">
            <div class="panel">
                <div class="panel-body">
                    <div class="table-responsive">
                        <table class="table">
                            <a class="btn btn-sm btn-success" href="{{ route('student.create') }}">Create</a>
                            <thead>
                                <tr>
                                    <th>Firstname</th>
                                    <th>Lastname</th>
                                </tr>
                            </thead>
                            @foreach($students as $student)
                                <tr>
                                    <td> {{$student->firstname}}</td>
                                    <td> {{$student->lastname}} </td>
                                    <td>
                                        <a class="btn btn-sm btn-warning" href="{{route('student.edit',$student->id)}}">Edit</a>
                                    </td>
                                </tr>
                            @endforeach
                        </table>
                    </div>
                </div>
            </div>
        </div>
        {!! $students->links() !!}
    </div>
@endsection

А также edit.blade.php

@section('content')
    <div class="px-content">
        <div class="page-header">
            <div class="row">
                <div class="col-md-4 text-xs-center text-md-left text-nowrap">
                    <h1>
                        <i class="px-nav-icon ion-android-apps"></i>Edit {{$student->id}}
                    </h1>
                </div>

                <hr class="page-wide-block visible-xs visible-sm">
                <!-- Spacer -->
                <div class="m-b-2 visible-xs visible-sm clearfix"></div>
            </div>
        </div>
        <div class="row">
            <div class="panel">
                <div class="panel-body">
                    <div class="table-responsive">
                        <form class="panel-body" action="/student/edit/{{$student->id}}" method="POST">
                            @csrf
                            <fieldset class="form-group">
                            <label for="form-group-input-1">Firstname</label>
                                <input type="text" name="firstname" class="form-control" id="form-group-input-1" value="{{$student->firstname}}">
                            </fieldset>
                            <fieldset class="form-group">
                                <label for="form-group-input-1">Lastname</label>
                                <input type="text" name="valeur" class="form-control" id="form-group-input-1" value="{{$lastname->valeur}}">
                            </fieldset>
                            <fieldset class="form-group">
                                <label for="form-group-input-1">Page</label>
                                <input type="text" name="page" class="form-control" id="form-group-input-1" value="{{$tariff->page}}">
                            </fieldset>
                            <button type="submit" class="btn btn-primary pull-right">MAJ</button>
                        </form>
                    </div>  
                </div>
            </div>
        </div>
    </div>
@endsection

По поводу маршрута папки у меня есть

Auth::routes();
route::resource('student','AdminController');

У вас есть идея, пожалуйста? Потому что я не понимаю мою проблему ...

Ответы [ 5 ]

0 голосов
/ 29 октября 2018

просто добавьте приведенный ниже код в свой блейд после вашего <form>

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

, а также измените свой маршрут с помощью Route::PATCH('/update/{id}','YourController@update');

0 голосов
/ 29 октября 2018

внутри формы добавьте эту строку

{{ method_field('PUT') }}
0 голосов
/ 29 октября 2018

в вашем файле edit.blade.php вы используете метод POST для тега формы. Вы должны изменить его на PUT

<form class="panel-body" action="/student/edit/{{$student->id}}" method="POST">

изменить на

<form class="panel-body" action="/student/edit/{{$student->id}}" method="PUT">

Поскольку route :: resource () генерирует маршрут PUT для обновления.

0 голосов
/ 29 октября 2018

Поскольку формы HTML не могут отправлять запросы PUT, PATCH или DELETE, вам необходимо добавить поле hidden _method, чтобы подделать эти HTTP-глаголы. Директива @method Blade может создать для вас это поле:

<form class="panel-body" action="/student/edit/{{$student->id}}" method="POST">
     @method('PUT')
 </form>
0 голосов
/ 29 октября 2018

Используя ресурс для маршрутов, ваш маршрут обновления будет иметь метод PUT|PATCH, поэтому, чтобы иметь возможность сделать запрос put в вашей форме внутри edit.blade.php, вам не хватает

@method('PUT')

Имейте в виду, что тег method в вашей форме должен оставаться POST, это дополнительное поле.

И, пожалуйста, всем прочитайте некоторую документацию, прежде чем ответить https://laravel.com/docs/master/routing#form-method-spoofing

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