如何在Laravel中删除文章



当我试图删除模型时,我得到这个错误:

Action AppHttpControllers Action ('ArticlesController@destroy ')未定义。

正确的方法是什么?

代码示例:形式:

{!! Form::open(['method' => 'DELETE', 'action' => "action('ArticlesController@destroy ')"]) !!}
<div class="form-group">
    {!! Form::submit(['class ' => 'btn btn-danger'] ) !!}
</div>
{!! Form::close() !!}
控制器方法:

 public function destroy(Article $article)
{
    $article->delete();
    return redirect('articles');
}

路线:

Route::get('/','ArticlesController@index');
Route::resource('articles','ArticlesController');

ArticlesController:

namespace AppHttpControllers;
use AppArticle;
use CarbonCarbon;
use IlluminateHttpRequest;
use AppHttpRequestsArticleRequest;
use AppHttpRequests;
use AppHttpControllersController;
use IlluminateSupportFacadesInput;
use InterventionImageFacadesImage;
   class ArticlesController extends Controller
{
    public function index()
    {
        $articles = Article::all();
        return view('articles.index', compact('articles'));
    }
    public function create()
    {
        return view('articles.create');
    }
    public function store(ArticleRequest $request)
    {
        if ($request->hasFile('file')) {
            $file = Input::file('file');
            $imgTitle = $request->title;
            $imagePath = 'uploads/' . $imgTitle . '.jpg';
            $request->image_path = $imagePath;
            $request->published_at = Carbon::now();
            Article::create(array('title' => $request->title,
                'body' => $request->body,
                'image_path' => $imagePath, 'published_at' => $request->published_at));
            Image::make($file)->resize(300, 200)->save($imagePath);
            return redirect('articles');
        } else {
            $url = 'https://ajax.googleapis.com/ajax/services/search/images?v=1.0&rsz=1&q=' . $request->title;
            $url = file_get_contents($url);
            $file = json_decode($url);
            $file = $file->responseData->results[0]->url;
            $imgTitle = $request->title;
            $imagePath = 'uploads/' . $imgTitle . '.jpg';
            $request->image_path = $imagePath;
            $request->published_at = Carbon::now();
            Article::create(array('title' => $request->title,
                'body' => $request->body,
                'image_path' => $imagePath, 'published_at' => $request->published_at));
            Image::make($file)->resize(300, 200)->save($imagePath);
            return redirect('articles');
        }
    }
    public function edit(Article $article)
    {
        return view('articles.edit', compact('article'));
    }
    public function update(Article $article, ArticleRequest $request)
    {
        $article->update($request->all());
        return redirect('articles');
    }
//    public function destroy(Article $article,ArticleRequest $request)
//    {
//        $article->delete($request->all());
//        return redirect('articles');
//    }
    public function destroy($id) {
        $article = Article::findOrFail($id);
        $article->delete();
        return redirect('articles');
    }
public function show(Article $article)
{
    return view('articles.show', compact('article'));
}

}

在您的表单中,您需要发送要删除的文章的id

例子

这是一个使用url来创建操作的表单:

 {!! Form::open(array('url' => 'articles' . $article->id)) !!}
                            {!! Form::hidden('_method', 'DELETE') !!}
                            {!! Form::submit('Delete article', array('class' => 'btn btn-danger')) !!}
{!! Form::close() !!}

控制器和删除动作:

 public function destroy($id)
    {
        $article= Article::findOrFail($id);
        $article->delete();
        return redirect('dashboard'); // example....
    }

您需要使用findfindOrFail来获取您想要删除的特定文章。我更喜欢findOrFail,因为如果文章id不存在,它将失败并返回404。

ArticlesController.php

public function destroy($id) {
    $article = Article::findOrFail($id);
    $article->delete();
}
<<p> 视图/strong>
{!! Form::open(['action' => ['ArticlesController@destroy', $article->id], 'method' => 'delete']) !!}
    {!! Form::submit('Delete', ['class'=> 'btn btn-danger']) !!}
{!! Form::close() !!}

注意:

正如文档所述,您的url不应该反映公共目录。目前你有localhost/Blog_Laravel/public/articles。您的URL应该是localhost/articles/1,其中1对应的文章。数据库中的Id。这取决于你如何设置路由。

我不知道你从哪里得到这个语法:

'action' => "action('ArticlesController@destroy ')"

但应该是:

'action' => 'ArticlesController@destroy'

最新更新