Laravel路由未定义为控制器功能

时间:2017-01-24 18:17:42

标签: php laravel routes laravel-5.3

我刚刚接受了一个教程,其中我在web.php中调用控制器函数所需的唯一代码是:

Route::resource('/articles', 'ArticleController');

这适用于我在创建项目时已经存在的所有功能(编辑,更新,销毁......) 现在我需要制作第二个更新功能(upvote)。但是当在控制器中创建一个新函数并路由到它时,我收到以下错误:

  

未定义路线[articles.upvote]。 (查看:D:\ school \ web-backend \ Oplossingen \ hackernews \ resources \ views \ articles \ index.blade.php)

如何将“a”标签转到控制器的upvote功能? 我的代码:

public function upvote(Request $request, $id)
{ /* ArticleController.php */
    $article = Article::find($id);
    $article->points += 1;
    $article->save();
    Session::flash('succes', 'Upvote was a succes');

    return redirect()->route('articles.index');
}

td> <!-- index.blade.php !-->
                           <a href="{{ route('articles.upvote', ['articles'=>$storedArticle->id]) }}" class="btn btn-default">upvote</a>
                        </td>
                        <td>downvote</td>
                        <td>
                            <a href="{{ route('articles.edit', ['articles'=>$storedArticle->id]) }}" class="btn btn-default">edit</a>
                        </td>


Route::get('/', function () { /*route\web.php */
return view('welcome');

});

Route :: resource('/ articles','ArticleController');

2 个答案:

答案 0 :(得分:3)

如果要使用articles.upvote语法,则需要命名路线。

您的web.php文件应如下所示:

// Use 'GET' or 'POST' depending on how you have your view setup
Route::get('/articles/{article}/upvote', 'ArticleController@upvote')->name('articles.upvote');
Route::resource('/articles', 'ArticleController');

有关路由的更多信息,请访问: https://laravel.com/docs/5.3/routing#named-routes

答案 1 :(得分:0)

您需要在路线中添加upvote功能。 因此您必须在

之类的web.php中创建新路由
Route::post('articles/{Article}/{article_id}/upvote','ArticleController@upvote')->name('upvote');