Chris
Chris

Reputation: 337

Routes don't work correctly at Laravel 5.0 (404 Error)

I switched to Laravel 5.0 and try to introduce myself.

I have a small problem which confuses me:

I use two Controller classes. The first works fine but the second one gets ignored. Could somebody tell me why?

routes.php

<?php
Route::controller('/', 'IndexController');
Route::controller('/rezeptliste', 'RecipelistController');

IndexController.php

<?php namespace App\Http\Controllers;

class IndexController extends Controller {
    public function getIndex() {
        return view('index');
    }
}

RecipelistController

<?php namespace App\Http\Controllers;

class RecipelistController extends Controller {
    public function getIndex() {
        return view('recipelist');
    }
}

When I access / it works perfectly. When I try to access /rezeptliste I get the following error:

NotFoundHttpException in Controller.php line 259:
Controller method not found.
in Controller.php line 259
at Controller->missingMethod('rezeptliste')
at call_user_func_array(array(object(IndexController), 'missingMethod'), array('_missing' => 'rezeptliste')) in Controller.php line 246
at Controller->callAction('missingMethod', array('_missing' => 'rezeptliste')) in ControllerDispatcher.php line 162
at ControllerDispatcher->call(object(IndexController), object(Route), 'missingMethod') in ControllerDispatcher.php line 107
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 108
at ControllerDispatcher->callWithinStack(object(IndexController), object(Route), object(Request), 'missingMethod') in ControllerDispatcher.php line 67
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\IndexController', 'missingMethod') in Route.php line 204
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 701
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 703
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 670
at Router->dispatchToRoute(object(Request)) in Router.php line 628
at Router->dispatch(object(Request)) in Kernel.php line 214
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53

Upvotes: 0

Views: 1555

Answers (3)

Nahid Bin Azhar
Nahid Bin Azhar

Reputation: 763

if you use Route:controller() then you have to mention request type in your controller method too. like this

class UserController extends Controller{
    public function getUserinfo(){
        //
    }

    public function postNewuser(){
        //
    }

}

so route can easily identify your request method.

now you can configure you route

Route::controller('user','UserController');

I think it will work fine

Upvotes: 0

Jared Eitnier
Jared Eitnier

Reputation: 7152

See section Adding Additional Routes To Resource Controllers of the docs

If it becomes necessary for you to add additional routes to a resource controller beyond the default resource routes, you should define those routes before your call to Route::resource:

Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');

Upvotes: 0

Nicklas Kevin Frank
Nicklas Kevin Frank

Reputation: 6337

The problem here is that in Laravel routes are evaluated in the order listed.

This means that since your very first route '/' matches the route /rezeptliste too, laravel will instead go to the IndexController and look for a method called "rezeptliste".

Instead your routes should be ordered like this:

<?php
Route::controller('/rezeptliste', 'RecipelistController');
Route::controller('/', 'IndexController');

That way your specialized url of /rezeptliste will be "caught" first and sent to the RecipelistController, rather then being caught by the IndexController route.

Upvotes: 4

Related Questions