当我试图删除模型时,我得到这个错误:
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....
}
您需要使用find
或findOrFail
来获取您想要删除的特定文章。我更喜欢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'