2
votes

I have a homegrown, Laravel 5.1 base application on top of which I build specific applications. The base application uses a named route for login, naturally called "login", which listens for GET /login.

In one of my specific applications, I attempted to overload that route to send the requests to a different controller. It seemed to work for a while, but then it started going to the base application's controller again. I'm sure I changed something to break it, but the problem is that I can't figure out how to fix it again.

My base application routes are all defined in app/Http/Routes/core.php. The relevant route:

Route::get('login', [
    'as' => 'login',
    'uses' => '\MyVendor\Core\Http\Controllers\AuthController@getLogin'
]);

My specific application routes are defined in app/Http/Routes/app1.php. The relevant route:

Route::get('login', [
    'as' => 'login',
    'uses' => 'App1\AuthController@getLogin'
]);

App2 and App3 are defined similarly. My app/Http/routes.php adds these routes like this:

require 'Routes/core.php';

Route::group(['domain' => 'app1.com'], function() {
    require 'Routes/app1.php';
});

Route::group(['domain' => 'app2.com', function() {
    require 'Routes/app2.php';
});

Route::group(['domain' => 'app3.com', function() {
    require 'Routes/app3.php';
});

The problem I am seeing is that visiting app1.com/login, app2.com/login, and app3.com/login all result in the execution of \MyVendor\Core\Http\Controllers\AuthController@getLogin rather than App1\AuthController@getLogin.

EDIT: I have changed the problem description since I was describing it incorrectly as a problem with calls to route('login').

2

2 Answers

1
votes

The index of the routes in Laravel follows a "$domain$uri" format, therefore routes with a domain won't overwrite those without. A fallback route without a domain should be declared after the domain group, so it is later in the route collection and won't match before a route with a matching domain.

0
votes

"the most recent definition for a route is the effective route"

This is not a bug, this is the expected behaviour, a simple example would be setting a variable to value 1 then setting it to value 2, of course the (most) recent value takes place.