2014-12-19 3 views
8

Verwenden asset Helferfunktion wie unten:Laravel: Set Asset ohne Protokoll

<script src="{{ asset('/assets/js/jquery-2.1.1.min.js') }}"></script> 

erhalten

<script src="http://xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script> 

Gibt es irgendwelche Laravel build-in-Lösungen können es

sein lassen
<script src="//xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script> 

und ordnungsgemäß mit http und https Protokolle angezeigt werden?

[EDIT]

Ich weiß, dass Laravel normalerweise das Protokoll richtig erkennt, aber wenn hinter einem Load Balancer, tut es nicht. Deshalb suche ich immer noch nach einer Lösung für dieses Problem.

+0

Haben Sie gefunden eine Lösung dafür? – kramer65

+0

Sie erkennen, dass der 'Asset'-Helfer ein zweites Argument' $ secure' hat? Das bedeutet, {{asset ('/ assets/js/jquery-2.1.1.min.js', true)}} 'sollte Ihnen das gewünschte geben, wenn Sie wissen, dass das Protokoll https sein muss. – jszobody

Antwort

1

Laravel wird die URL des Assets automatisch in das Protokoll ändern, das zum Laden der Site verwendet wird.

Wenn Ihre Site über eine sichere Verbindung geladen wird, verwenden die Asset-Links automatisch HTTPS.

Update:

Wenn Sie die Vermögenswerte mit nur // angezeigt werden wollen, könnten Sie Ihre eigene HTML macro schreiben.

+0

Das Problem ist, dass wenn eine Site hinter einem Load Balancer ist, es HTTP-Links anzeigt, wo es sich um HTTPS-Links handeln sollte. – kramer65

0

Der Code, der Asset-URLs erzeugt, ist in belichten/Routing/UrlGenerator.php

Es gibt eine forceSchema() -Methode, die leicht modifiziert werden könnte, zu tun, was Sie benötigen, obwohl diese Funktionalität wahrscheinlich ehrlich sein sollte in Laravel und es könnte sich lohnen, eine Pull-Anfrage auf ihrem Github einzureichen.

5

Laravel gesicherte Verbindung nur erstellen, wenn der Antrag als gesichert angesehen wird.

Laravel hat bereits eine Möglichkeit, Nicht-HTTP-Verkehr als "gesichert" zu behandeln, wenn es von einem "vertrauenswürdigen Proxy" kommt.

können Sie erklären, eine solche vertrauenswürdige Proxys in Ihrem Application Service Provider wie folgt aus:

Request::setTrustedProxies(array('199.27.128.0/21', 'some other range')); 

Also, stellen Sie sicher, dass Ihre Loadbalancer die folgenden Header richtig eingestellt:

Host, X-Forwarded-Host, X-Forwarded-Port, X-Real-IP, X-Forwarded-For and X-Forwarded-Proto 

"Public" Proxies wie Cloudflare macht das schon jetzt.

Im Grunde ist hier die Client - Verbindung auf einem der Frontend - Server (als Proxy) beendet, daher müssen wir die Kommunikation von diesem Server als vertrauenswürdig deklarieren, so dass Laravel Header vom Proxy - Server anstelle des Werte werden lokal abgerufen.

Dadurch können Funktionen wie Request :: isSecure() oder Request :: ip() ein konsistentes Ergebnis zurückgeben.

0

Asset() erzeugen eine URL zu erzeugen, um die derzeitige Regelung der Anforderung (HTTP oder HTTPS):

Und wenn Sie wollen eine externe URL zur Verfügung zu stellen, für die Sie nicht wissen, über http oder https wie CDN URL wie unten

<script src="{!! asset('//code.jquery.com/jquery-2.1.1.min.js') !!}"></script> 

immer Sie wie

schreiben kannschreiben

OR

<script src="{!! asset('//'.Request::server ('HTTP_HOST').'/assets/js/jquery-2.1.1.min.js') !!}"></script> 
0

ich hatte das gleiche Problem, dann entdeckte ich, dass der Vermögenswert() -Methode eine optionale zweite Variable, wahr oder falsch für SSL-Anforderungen hat.

Die Lösung, die ich benutze, sind die folgenden:

<link rel="stylesheet" href="{{ asset('assets/bootstrap/3.3.7/css/bootstrap.min.css', !App::isLocal()) }}" /> 

<script type="text/javascript" src="{{ asset('assets/parsley/2.4.4/parsley.min.js', !App::isLocal()) }}"></script> 

Hinweis:

!App::islocal() 

Wenn meine Anwendungsumgebung lokal ist, wird SSL nicht gewählt, aber in der Umwelt Produktion der Vermögenswerte über SSL angerufen werden.

+0

Das ist nicht dasselbe wie '//' – Neat

+0

Yup, wahr. Es wird jedoch ordnungsgemäß eine Anforderung über SSL ermöglichen, da die Asset-Methode aufgefordert wird, sie bereitzustellen. – Sledmore

0

ich normalerweise

<script src="/assets/js/jquery-2.1.1.min.js"></script> 

verwenden, ohne den Aufruf der Vermögenswert() Funktion

schmutzig ich weiß, aber in 90% der Seiten, die ich arbeitete, ist es eine perfekte Lösung