从Laravel 4.2更新到5.0之后,我几乎在我的应用程序的每一页都收到以下消息:
UrlGenerator.php第561行中的InvalidArgumentException:Action ArticlesController @ create not defined。
在我的routes.php文件中,我有:
Route::get('articles/create', ['as' => 'articles.create', 'uses' => 'ArticlesController@create']);
Route::post('articles/create', ['as' => 'articles.create.handle', 'uses' => 'ArticlesController@handleCreate']);
在我的控制器中:
class ArticlesController extends Controller {
public function create()
{
$input=null;
if (Input::old()) {
$input = Input::old();
}
$tagsJson = Tag::all()->toJson();
$categories = ArticleCategory::all();
return View::make('admin.articles.create', compact(array('tagsJson', 'categories', 'input')));
}
public function handleCreate()
{
$input = Input::all();
if ($input['op']=="preview") {
return redirect()->action('ArticlesController@create')->withInput();
} else if ($input['op']=="post") {
//
}
}
}
我得到的错误来自这一行:
return redirect()->action('ArticlesController@create')->withInput();
有任何帮助吗? 谢谢,伊利亚斯
答案 0 :(得分:8)
您收到此错误,因为Laravel 5默认使用命名空间。官方的Laravel 5升级指南说明了有关迁移控制器的以下内容:
由于我们不打算在本指南中迁移到完整的命名空间,因此将app / Http / Controllers目录添加到composer.json文件的classmap指令中。接下来,您可以从抽象app / Http / Controllers / Controller.php基类中删除命名空间。验证迁移的控制器是否正在扩展此基类。
在app / Providers / RouteServiceProvider.php文件中,将namespace属性设置为null。
在"控制器"下列出here。
最后一行可能会解决您的问题。
答案 1 :(得分:2)
如果要从链接或表单指向控制器方法,则必须为生成的任何URL定义路由。动作链接到方法取决于路线..
为此创建路线时,它将起作用,错误将消失。
答案 2 :(得分:1)
我收到了同样的错误消息,这是因为我完全忘记了我需要将其添加到routes/web.php
:
Route::get('myUrlPath', 'HomeController@myActionName');
我一直试图通过另一个控制器动作来做到这一点:
return redirect()->action('HomeController@myActionName')->with('windowTitle', 'Error. Please contact us.')->with('message', $message);