2017-10-12 6 views
1

Ich brauche Hilfe mit meiner Laravel Blade-Ansicht. Derzeit verwende ich <link href="{{asset('css/sample.css')}}" rel="stylesheet">, um den Pfad zu meinem Beispiel.css in meinem öffentlichen Ordner jedes Mal zu generieren. Was es wird so etwas wie <link href="http://mydomainname/css/sample.css" rel="stylesheet"> erzeugen und es funktioniert gut (mein öffentlicher Ordner ist in meinem Public_html Ordner cpanel Hosting).Laravel Klinge Ansicht relativen Pfad

Allerdings möchte ich einen relativen Pfad anstelle der direkten Verbindung zu meiner CSS-Datei verwenden. Ich möchte einen einfacheren Ansatz wie <link href="css/sample.css" rel="stylesheet"> verwenden, es funktioniert, wenn ich an der Root-Route arbeite, aber es funktioniert nicht, wenn es in den tieferen Weg meiner Website geht.

Kann jemand helfen, wie man den relativen Weg zu meiner css Akte erzeugt?

Vielen Dank.

Antwort

0

Es wurde gelöst durch Modifizieren vendor\laravel\framework\src\Illuminate\Foundation\helpers.php in:

function asset($path, $secure = null) 
{ 
    $url = app('url')->asset($path, $secure); 
    return parse_url($url, PHP_URL_PATH); 
} 

allen asset() Code in meinem Laravel erzeugt jetzt nur den Pfad (durch Entfernen der Domain-URL) und funktioniert entweder auf meiner Produktion oder localhost

3

Dies ist erreichbar mit dem einfacheren Ansatz, den Sie vorschlagen, Sie fehlen nur eine /.

Wenn Sie mit einem Pfad wie diesem auf Ihre CSS-Datei verlinken; /css/sample.css dann teilt es dem Browser mit, dieses Dokument in Bezug auf die Root-URL zu holen. Dies gilt auch für jedes Asset, das Sie verwenden.

So als HTML-Link wäre es:

<link href="/css/sample.css" rel="stylesheet"> 

Dieser dem Browser mitteilen würde, egal, welche Seite Sie sich befinden, die sample.css Datei von http(s)://example.com/css/sample.css zu holen.

Ohne die / am Anfang, Ihr Link sagt, holen Sie es in Bezug auf die aktuelle Seite; http(s)://example.com/your/page/url/css/sample.css. Auf Ihrer Homepage wird dies offensichtlich erfolgreich sein, da die URL immer noch auf http(s)://example.com/css/sample.css aufgelöst wird.

+0

hallo, ja, ich habe es ausprobiert und dies ist der beste Ansatz, indem ich '/' hinzufüge. es funktioniert jedoch nicht auf meinem localhost 'http: // localhost/meinprojektname/public/css/sample.css' wird erzeugt, wenn ich den'/css/sample.css' Code verwende. Ich kann damit auf meinem Produktionsserver arbeiten, aber nicht auf meinem localhost – efraim

+0

Warum können Sie das nicht auf Ihrem localhost verwenden? Denken Sie daran, dass Sie Ihre Hosts-Datei immer bearbeiten können, um eine URL zurück zu Ihrer lokalen Entwicklungsumgebung zuzuordnen, damit dies funktioniert. ZB erstellen Sie einen Eintrag für myproject.dev, um auf 127.0.0.1 zu verweisen und aktualisieren Sie dann einfach Ihren vhost auf Apache oder dem Äquivalent auf Ihrem Webserver. Dies ist der Grund, warum 'asset()' so ein großer Helfer ist, da es um dieses Problem herum funktioniert, indem es die URL in der aktuellen Umgebung verwendet. – James

+0

Ja, aber Asset() erzeugt einen Hyperlink anstelle des lokalen Verzeichnisses. Ich habe versucht, meine Website mit Google PageSpeed ​​zu optimieren und das Hauptproblem ist Asset() wird einen vollständigen Link generieren, der direkt in meine eigene Domain ging. Ich habe dieses Problem gelöst, indem ich den Helper asset() überschrieben habe und die mit parse_url generierte URL entfernt habe. Danke für deine Hilfe James. – efraim

0

Nach this Sie müssen nur Ihre index.php bearbeiten, wie unten in public Ordner:

/* 
|-------------------------------------------------------------------------- 
| Turn On The Lights 
|-------------------------------------------------------------------------- 
| 
| We need to illuminate PHP development, so let us turn on the lights. 
| This bootstraps the framework and gets it ready for use, then it 
| will load up this application so that we can run it and send 
| the responses back to the browser and delight our users. 
| 
*/ 

$app = require_once __DIR__.'/../bootstrap/app.php'; 

// set the public path to this directory 
$app->bind('path.public', function() { 
    return __DIR__; 
});