2016-07-31 12 views
0

Meine App sollte Admin, Mitglieder und öffentliche Bereiche, von admin.mydomain.com, members.mydomain.com und www.mydomain.com zugeordnet haben. Dokumentation enthält das folgende Beispiel in Bezug auf Routing Subdomain:Laravel 5 Routing: Admin, Mitglieder, öffentliche

Route::group(['domain' => '{account}.myapp.com'], function() { 
    Route::get('user/{id}', function ($account, $id) { 
    // 
    }); 
}); 

Aber ich will nicht auf andere Weise codieren oder verwenden Sie die zweiten Level-Domainnamen in Route (myapp.com in diesem Beispiel). Also machte ich es so:

Route::pattern('domain', '.+\..+'); 
Route::group(['namespace' => 'Admin', 'domain' => 'admin.{domain}', 'middleware' => 'auth'], 
    function() { 
    Route::get('/edit/{id}/{name}', '[email protected]'); 
}); 

Dann machte ich einen Controller wie

class MyController extends Controller 
{ 
    function index($id, $name) { 
     dd($id); 
    } 
} 

und wenn ich admin.mydomain.com/edit/1/alex navigieren, bekomme ich Ausgang "admin". Natürlich passiert es, weil ich {domain} als Muster verwende. Aber ich möchte Domain nicht als erstes Argument in jeder Aktion aller Admin-Controller erhalten. Bitte hilf mir, das richtig zu machen.

+0

Ich habe dies nicht persönlich versucht, aber Sie sollten in der Lage sein, nur eine Middleware zwischen dem Controller und der Anfrage selbst zu setzen. Sie erhalten nicht das erste Argument als Subdomain im Controller, es sei denn, Sie möchten es an einige/alle Controller übergeben. – Andrew

Antwort

0

Eine Idee wäre eine Middleware erschaffen, die die domain Parameter entfernen werden:

namespace App\Http\Middleware; 
use Closure; 
class RemoveDomainMiddleware { 

    public function handle($request, Closure $next) { 

    $request->route()->forgetParameter('domain'); 

    return $next($request); 
    } 
} 

dann registriert die Middleware in app/Http/Kernel.php sicher:

protected $routeMiddleware = [ 
    //...... 
    'domain' => \App\Http\Middleware\RemoveDomainMiddleware::class, 
    //..... 
]; 

Schließlich fügen Sie die Middleware zu Ihrer Gruppe :

Route::group([ 'middleware' => ['domain', 'auth'], 'namespace' => 'Admin', 'domain' => 'admin.{domain}'], 
    //..... 
}); 

Ich hoffe th wird dir helfen.