2017-01-26 4 views
1

Ich habe meine Laravel App von einem Unterverzeichnis ausgeführt, so dass die URL-Helper wie folgt verwenden: {{ url('users') }} anstelle von {{ url('subdirectory/users') }} Ich verwende die forceRouteUrl() Methode in meiner AppServiceProvider.php Datei. Es sieht wie folgt aus:Die Verwendung von forceRootUrl() bricht einige Routing

public function boot() 
    { 
     URL::forceRootUrl(Config::get('app.url')); 

... 

Und mein .env: APP_URL=http://app.dev/subdirectory

So weit so gut, außer wenn Strecken zurück. Zum Beispiel habe ich ein Sortierverfahren, das dies tut:

function sort_schedule($column, $order) 
{ 
    return route('schedule', [ 
       'sortBy' => $column, 
       'sortOrder' => $order, 
      ] 
     ); 
} 

Aber die Verbindung erzeugt es ist dieser: http://app.dev/subdirectory/subdirectory/...

Das gleiche passiert, wenn ich Kyslik's Column Sortable Paket verwenden.

Wie kann ich das beheben?

Antwort

1

Es scheint, dass während andere Helfer wie URL() oder Asset() dieses Problem nicht haben, der Helper Route() den Teilpfad dupliziert, wenn Laravel nicht direkt vom Site-Root und forceRootUrl() zugegriffen werden kann wird eingesetzt. Ich benutze Laravel 5.4, aber dieses Problem ist auch in früheren Versionen vorhanden.

Um dieses Problem zu lösen, fand ich drei mögliche Lösungen:

  1. Verwenden url() statt Route() und manuell Urls
  2. Jedesmal erstellen verwenden Sie Route() erinnern als dritte falsch passieren Parameter, wird es relative Pfade verwenden, die dieses Problem nicht
  3. Aufschalten die Standardroute() Helfer mit einem benutzerdefinierten einem

ich für die dritte Option entschieden haben und erstellt eine CustomHelper. PHP-Datei, die meinen neuen route() Helfer enthält. Hier sind die Anweisungen, wie Standard-Helfer außer Kraft zu setzen: https://laracasts.com/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Inside my CustomHelper.php Datei ich diesen

Die app.url_suffix ist eine benutzerdefinierte Variable, die i definiert in config/app

function route($name, $parameters = [], $absolute = true) 
{ 
    $appUrl = config('app.url'); // in your case: http://app.dev 
    $appUrlSuffix = config('app.url_suffix'); // in your case: subdirectory 

    // Additional check, do the workaround only when a suffix is present and only when urls are absolute 
    if ($appUrlSuffix && $absolute) { 
     // Add the relative path to the app root url 
     $relativePath = app('url')->route($name, $parameters, false); 
     $url = $appUrl.$relativePath; 
    } else { 
     // This is the default behavior of route() you can find in laravel\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php 
     $url = app('url')->route($name, $parameters, $absolute); 
    } 

    return $url; 
} 
hinzugefügt. php

'url_suffix' => env('APP_URL_SUFFIX', null), 

und in der .env Konfigurationsdatei

APP_URL_SUFFIX=subdirectory 
Verwandte Themen