web-dev-qa-db-fra.com

Laravel action non définie

Après la mise à jour de Laravel 4.2 à la version 5.0, le message suivant s'affiche dans presque toutes les pages de mon application:

InvalidArgumentException dans la ligne UrlGenerator.php 561: Action ArticlesController @ create non définie.

Dans mon fichier routes.php, j'ai:

Route::get('articles/create', ['as' => 'articles.create', 'uses' => 'ArticlesController@create']);
Route::post('articles/create', ['as' => 'articles.create.handle', 'uses' => 'ArticlesController@handleCreate']);

Et dans mon contrôleur:

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") {
            //
        }

    }
}

L'erreur que je reçois vient de cette ligne:

return redirect()->action('ArticlesController@create')->withInput();

Toute aide? Merci, Ilias

14
Ilias Kouroudis

Vous obtenez cette erreur car Laravel 5 utilise l'espacement de noms par défaut. Le guide officiel de mise à niveau Laravel 5 indique ce qui suit concernant la migration de vos contrôleurs:

Comme nous n'allons pas migrer vers un espacement de noms complet dans ce guide, ajoutez le répertoire app/Http/Controllers à la directive classmap du fichier composer.json. Ensuite, vous pouvez supprimer l’espace de noms de la classe de base abstract app/Http/Controllers/Controller.php. Vérifiez que vos contrôleurs migrés étendent cette classe de base.

Dans votre fichier app/Providers/RouteServiceProvider.php, définissez la propriété namespace sur null.

Répertoriés ici sous "contrôleurs". 

La dernière ligne est probablement celle qui résoudra votre problème. 

8
Maarten00

vous devez définir des itinéraires pour toute URL générée et si vous pointez une méthode de contrôleur depuis des liens ou un formulaire. actions des liens vers les méthodes dépend de Routes.

Lorsque vous créez un itinéraire pour cela, cela fonctionnera et l'erreur disparaîtra.

2
Hos Mercury