Laravel行动没有定义

时间:2015-04-23 11:37:51

标签: php laravel laravel-5

从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();

有任何帮助吗? 谢谢,伊利亚斯

3 个答案:

答案 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);