Я новичок в Laravel (но не развиваюсь) и следую за бесплатным курсом Laravel 6 с нуля в Laracasts. Я не могу позволить себе подписаться на Laracasts, поэтому я не могу задавать вопросы там.
Я следил за тем, как инструктор создал приложение, которое перечисляло кучу статей, отображало одну статью, создавало и сохраняло новую статью, редактировало существующую статью и сохраняло ее обратно в базу данных. Сейчас я пытаюсь удалить отдельную запись, но не совсем понимаю, как это сделать.
На странице, где я отображаю одну запись, я даю пользователю возможность редактировать запись или удалять запись по двум отдельным ссылкам. Процесс редактирования работает нормально: он отображает запись, позволяет мне изменить ее (при условии, что я прошел проверки), а затем правильно сохраняет ее в базе данных.
Процесс удаления завершается неудачей. Поскольку я уже показываю запись пользователю и предположительно убедился, что это именно та запись, которую он хочет удалить, я хочу просто go для метода destroy () моего контроллера. Но я явно делаю это неправильно. Я думаю код в контроллере правильный, поэтому это могут быть испорченные маршруты. Курс не показывает вам, как сделать удаление видео и статей о переполнении стека, которые я видел, используют разные методы, ни один из которых я полностью не понимаю. Я надеюсь, что кто-то может сказать мне, что я делаю неправильно. Не может быть больше одной или двух неправильных строк ....
Вот сообщение, которое я получаю, когда нажимаю кнопку "Удалить" при отображении статьи № 6:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
The GET method is not supported for this route. Supported methods: POST.
http://localhost:8000/articles/6/delete
Вот мой маршрут:
Route::get('/articles', 'ArticlesController@index');
Route::post('/articles', 'ArticlesController@store');
Route::get('/articles/create', 'ArticlesController@create');
Route::get('/articles/{article}', 'ArticlesController@show');
Route::get('/articles/{article}/edit', 'ArticlesController@edit');
Route::put('/articles/{article}', 'ArticlesController@update');
Route::post('/articles/{article}/delete', 'ArticlesController@destroy');
Вот страница, которая отображает статью и позволяет пользователю нажимать на ссылку Изменить или Удалить ссылки:
@extends ('layout');
@section ('content');
<div id="wrapper">
<div id="page" class="container">
<div id="content">
<div class="title">
<h2>{{ $article->title }}</h2>
<span class="byline">{{ $article->author}}</span></div>
<p><img src="{{ $article->photopath}}" alt="" class="image image-full" /> </p>
<p>{{ $article->body }}
<p><a class="article-link" href="/articles/{{ $article->id }}/edit">Edit This Article</a>
<a class="article-link" href="/articles/{{ $article->id }}/delete">Delete This Article</a></p>
</div>
</div>
</div>
@endsection
Наконец, вот мой ArticleController:
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticlesController extends Controller
{
public function index()
{
$articles = Article::latest()->paginate(2);
return view ('articles.index', ['articles' => $articles]);
}
public function show(Article $article)
{
return view('articles.show', ['article' => $article]);
}
public function create()
{
return view('articles.create');
}
public function store()
{
//Stores a NEW article
Article::create($this->validateArticle());
return redirect('/articles');
}
public function edit(Article $article)
{
return view('articles.edit', ['article' => $article]);
}
public function update(Article $article)
{
//Updates an EXISTING article
$article->update($this->validateArticle());
return redirect('/articles/'.$article->id);
}
public function validateArticle()
{
return request()->validate([
'title' => ['required', 'min:5', 'max:20'],
'author' => ['required', 'min:5', 'max:30'],
'photopath' => ['required', 'min:10', 'max:100'],
'excerpt' => ['required', 'min:10', 'max:50'],
'body' => ['required', 'min:50', 'max:500']
]);
}
public function delete(Article $article)
{
return view('articles.delete', ['article' => $article]);
}
public function destroy(Article $article)
{
$article = Article::find($article->id);
$article->delete();
return redirect('/articles');
}
}