От проверки Выдает ошибку. Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST. " - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в laravel .. Вид застрял в этом месте. Попробовал много решений для этого, но ни одно еще не сработало. Есть похожий вопрос, но большинство не решено, или правильное очевидное решение еще не опубликовано (от google, stackoverflow ..et c)

я определил собственный маршрут

Route::post('/ComplaintGenerate', 'ComplaintsController@generate'); 

всякий раз, когда я отправляю представление методом POST как

<form action="/ComplaintGenerate" method="POST" > 

без каких-либо правил проверки в моем контроллере жалоб, все работает нормально, и я могу сохранять данные. но когда я ставлю валидацию через Requests или direct, выдается ошибка Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST.

Если я удаляю проверку, все работает нормально. Я также попробовал с методом GET, но все еще работал. Мы будем очень признательны за небольшой совет.

Web.route

Route::middleware(['auth'])->group(function(){
Route::post('/Complaint', 'ComplaintsController@find'); 
Route::post('/ComplaintGenerate', 'ComplaintsController@generate');
Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
Route::resource('Complaints', 'ComplaintsController');
Route::resource('Occupancies', 'OccupanciesController');
Route::resource('Customers', 'CustomersController');
Route::resource('Services', 'ServiceController');
Route::resource('ServiceTeams', 'ServiceTeamController');
Route::get('/home', 'HomeController@index')->name('home');});

Мой контроллер:

public function generate(GenerateInitialComplaintRequest $request)
{  
    $complaint = Complaint::find($request->complaint_id);
    $complaint->update([
        'complaint_date'=>$request->complaint_date,
        'complaint_description'=>$request->complaint_description,   
    ]);

    return redirect(route('Complaints.index')->with('complaint', Complaint::all()));           
}

my View:

<div class="container my-5">

<div class="col d-flex justify-content-center my-4">
    <div class="card">
        <div class="card-header">

            <form action="/ComplaintGenerate" method="POST" >
          @csrf
          @if ($errors->any())
                <div class="alert alert-danger">
                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif
          <div class="form-row">
            <div class="form-group col-md-6">
              <label for="complaint_id">Complaint Number</label>
              <input type="text" class="form-control" id="complaint_id" name="complaint_id" value="{{$complaint->id}}" readonly >
            </div>
            <div class="form-group col-md-6">
              <label for="complaint_date">Complaint Date</label>
              <input type="text" class="form-control" id="complaint_date" name="complaint_date">
            </div>
          </div>

          <div class="form-row">
            <div class="form-group  col-md-12">
              <label for="complaint_description">Complaint Description</label>
              <textarea class="form-control" id="complaint_description" name="complaint_description" rows="5"></textarea>
            </div>
          </div>             
         <div class="text-center">
             <button type="submit" class="btn btn-primary">Save</button>                
         </div>
    </form>
        </div>
    </div>
</div>

Ответы [ 3 ]

0 голосов
/ 27 февраля 2020

я нашел решение, упомянутое Анкуром Мишрой и Ариалом. Мы должны помнить, как упомянуто Ариалом. Когда проверка не удалась, Laravel выполняет перенаправление, используя метод GET, на маршрут, с которого оно было отображено. И я отобразил мою форму через

Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');

Метод контроллера:

public function save_customer($id)
{         
    $complaint = Complaint::create([
        'customer_id'=>$id
    ]);
   // $complaint = Complaint::whereCustomer_id($id)->firstorfail();
    return view('complaints.initial_complaint')->with('complaint', $complaint);            
}

'tims.initial_complaint '- это представление, которое имеет форму, которая выдала мне ошибку . Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST. при отправке. Поэтому я изменяю POST-маршрут на GET: -

Route::middleware(['auth'])->group(function(){
//Route::resource('Complaints', 'ComplaintsController');
Route::get('/Complaint', 'ComplaintsController@find');      
Route::get('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
Route::get('/ComplaintGenerate', 'ComplaintsController@generate');
Route::resource('Complaints', 'ComplaintsController');
Route::resource('Occupancies', 'OccupanciesController');
Route::resource('Customers', 'CustomersController');
Route::resource('Services', 'ServiceController');
Route::resource('ServiceTeams', 'ServiceTeamController');
Route::get('/home', 'HomeController@index')->name('home');

});

и, в связи с этим, передал GET как скрытый метод

<form action="/ComplaintGenerate" method="POST" >
          @csrf
          @method('GET')
          @if ($errors->any())
                <div class="alert alert-danger">
                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif
          <div class="form-row">
            <div class="form-group col-md-6">
              <label for="complaint_id">Complaint Number</label>
              <input type="text" class="form-control" id="complaint_id" name="complaint_id" value="{{$complaint->id}}" readonly >
            </div>
            <div class="form-group col-md-6">
              <label for="complaint_date">Complaint Date</label>
              <input type="text" class="form-control" id="complaint_date" name="complaint_date">
            </div>
          </div>

          <div class="form-row">
            <div class="form-group  col-md-12">
              <label for="complaint_description">Complaint Description</label>
              <textarea class="form-control" id="complaint_description" name="complaint_description" rows="5"></textarea>
            </div>
          </div>             
         <div class="text-center">
             <button type="submit" class="btn btn-primary">Save</button>                
         </div>
    </form>

и теперь он работает на меня .. Просто опубликовал, чтобы кто-нибудь мог использовать его для дальнейшего использования

0 голосов
/ 27 февраля 2020

Вы должны добавить

Route::get('/ComplaintGenerate', 'ComplaintsController@generate');
Route::post('/ComplaintGenerate', 'ComplaintsController@generate');
0 голосов
/ 27 февраля 2020

Каков маршрут для отображения вашей формы? Когда проверка не проходит, Laravel выполняет перенаправление, используя метод GET, на маршрут, с которого она была отображена.

Я предполагаю, что форма может отображаться в методе find вашего ComplaintsController, а когда проверка не проходит, есть перенаправление на этот маршрут, и именно это приводит к ошибке.

Можете ли вы также показать свои методы проверки и какие данные вы пытаетесь отправить через форму?

...