LaravelスタイルシートとJavaScriptが非ベースルートで読み込まれない


97

わかりました-これは本当に初歩的な問題であることは知っていますが、理解できません。これはLaravelに関する質問です。

基本的に、デフォルトのレイアウトビューにスタイルシートが埋め込まれています。私は現在、それらをリンクするために通常のCSSを使用しています:

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

/ aboutなどの単一レベルのルートにいるときはうまく機能しますが、/ about / meなどのように深くなると機能しなくなります

Chromeのデベロッパーコンソールを見ると、次のエラーがいくつか表示されます(より深いルートのみ)。

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://example.dev/about/css/app.css".

したがって、明らかに、「about」フォルダ内のcssを探しています。もちろん、これはまったくフォルダではありません。

ルートに関係なく、同じ場所でアセットを検索したいだけです。

回答:


168

Laravel 4および5の場合:

<link rel="stylesheet" href="{{ URL::asset('assets/css/bootstrap.min.css') }}">

URL::assetproject/public/フォルダにリンクするので、スクリプトをそこに入れます。


注:このためには、「ブレードテンプレートエンジン」を使用する必要があります。ブレードファイルは.blade.php拡張子を使用します。


8
Laravel 5および5.1でも動作することを確認するだけです。ありがとうございました。
FilipFilipović15年

1
自分でパッケージを作成しました。中にCSSを入れてもいいですか?もしそうなら、どうすれば自分のパッケージからCSSを含めることができますか?
chourn solidet 2016

asset()ヘルパーメソッドインスタントを使用することもできURL::asset()ます。同じことを行います。
Marek Skiba 2016年

3
で作品Laravel 5.4にも。
user3426112 2017

プロダクションでは縮小版が必要だが、開発中ではない場合はどうなりますか?
ジオイデシック2017年

52

ララヴェル4

これを行うためのより良い正しい方法

CSSの追加

HTML :: styleは、project / public /フォルダーにリンクします

{{ HTML::style('css/bootstrap.css') }}

JSの追加

HTML :: scriptは、project / public /フォルダーにリンクします

{{ HTML::script('js/script.js') }}

13

アセットに相対パスを使用しており、絶対パスに変更すると、すべてが機能します(「css」の前にスラッシュを追加します)。

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

アプリがサイトのサブディレクトリにある場合、これは機能しません。次に、資産を探しすぎている問題に遭遇します。私の推奨は、@ Chrisが提供するソリューションを使用することです。これにより、すべての推測が不要になり、アプリをどこにでも移動でき、アセットが正しく読み込まれるようになります。
Tim F

10

Laravel 5では
、ビューにjsファイルをロードする方法は2つあります。1つ
はhtmlヘルパーを使用する方法、もう1つはアセットヘルパーを使用する方法です。
HTMLヘルパーを使用するには、最初にこのパッケージをコマンドラインからインストールする必要があります。

composer require illuminate/html

次に、それを再要求する必要があるため、config / app.phpに移動し、この行をプロバイダー配列に追加します

'Illuminate\Html\HtmlServiceProvider'

次に、htmlパッケージのエイリアスを定義する必要があるため、config / app.phpのエイリアス配列に移動して、これを追加します

'Html'     => 'Illuminate\Html\HtmlFacade'

これでHTMLヘルパーがインストールされたので、ブレードビューファイルで次のように記述できます。

{!! Html::script('js/test.js') !!}

これにより、project_root / public / js / test.jsでtest.jsファイルが検索されます。
////////////////////////////////////////////////// ////////////
HTMLヘルパーの代わりにアセットヘルパーを使用するには、ビューファイルに次のようにsthを記述する必要があります。

<script src="{{ URL::asset('test.js') }}"></script>

これは、project_root / resources / assets / test.jsでtest.jsファイルを探します。


lighting / htmlは放棄されました。代わりにユーザーlaravelcollective / html。
ジオイデシック2017年

<script src="{{ url(asset('test.js')) }}"></script>(または <script src="{{ url(mix('test.js')) }}"></script>Laravel Mixを使用している場合)も使用できます。
2017

9

Laravel 3とCSS / JSファイルをこのようなパブリックフォルダ内で使用している場合

public/css
public/js

次に、このようなブレードテンプレートを使用してそれらを呼び出すことができます

{{ HTML::style('css/style.css'); }}
{{ HTML::script('js/jquery-1.8.2.min.js'); }}

6

{project} /application/routes.phpの前にルートフィルターに置くことをお勧めします

Route::filter('before', function()
{
    // Do stuff before every request to your application...    
    Asset::add('jquery', 'js/jquery-2.0.0.min.js');
    Asset::add('style', 'template/style.css');
    Asset::add('style2', 'css/style.css');

});

およびブレードテンプレートエンジンの使用

{{ Asset::styles() }}
{{ Asset::scripts(); }}

laravelのアセット管理ドキュメントに関する詳細


はい、この新しいlaravelはすべてのものも、プロファイラもうドキュメントではありません..、資産を複雑になり
AndryのYosua

3

laravel 4、あなただけ貼り付ける必要があり{{ URL::asset('/') }}、このように:

  <link rel="stylesheet" href="{{ URL::asset('/') }}css/app.css" />.

それは同じです:

  <script language="JavaScript" src="{{ URL::asset('/') }}js/jquery.js"></script>
  <img src="{{ URL::asset('/') }}img/image.gif">

3

Laravel 5.4と混合ヘルパー:

<link href="{{ mix('/css/app.css') }}" rel="stylesheet">
<script src="{{ mix('/js/app.js') }}"> </script>

3

Laravel 5.7では、CSSまたはJSファイルをパブリックディレクトリに配置します。

CSSの場合:

<link rel="stylesheet" href="{{ asset('bootstrap.min.css') }}">

JSの場合:

<script type="text/javascript" src="{{ asset('bootstrap.js') }}"></script>

2

私の意見では最善の方法は、HTMLにBASEタグを追加することです

<base href="/" target="_top">

したがって、次のようなものを使用する必要はありません

{{ HTML::script('js/jquery/jquery-1.11.1.min.js'); }}

入力するだけ

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

あなたの見解では、それは動作します。

この方法では、RESTfulなURLと静的リソースを画像、CSS、スクリプトとして扱います。


2

Vinsaは、追加する必要があると思っていました。

<base href="{{URL::asset('/')}}" target="_top">

スクリプトは通常のパスに移動する必要があります

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

これは、画像や、画像ソースやajaxリクエストなどの相対パスを持つものは、ベースパスが接続されていないと正しく機能しないためです。


1

ハードコーディングする場合は、フルパス(href="http://example.com/public/css/app.css")を使用する必要があります。ただし、これは開発と本番用にURLを手動で調整する必要があることを意味します。

上記の解決策の代替案は<link rel="stylesheet" href="URL::to_asset('css/app.css')" />、Laravel 3または<link rel="stylesheet" href="URL::asset('css/app.css')" />Laravel 4で使用することです。これにより、HTMLを好きなように書くことができますが、Laravelがあらゆる環境で適切なパスを生成できるようになります。


1

次のように使用するより良い方法

<link rel="stylesheet" href="{{asset('assets/libraries/css/app.css')}}">

1

パブリックフォルダの名前を変更していないとします。cssおよびjsファイルは、パブリックフォルダーのcssおよびjsサブフォルダーにあります。これで、ヘッダーは次のようになります。

<link rel="stylesheet" type="text/css" href="/public/css/icon.css"/>
<script type="text/javascript" src="/public/js/jquery.easyui.min.js"></script>

1

別の問題を追加するだけです:

/publicを使用してプロジェクトから削除する場合は.htaccess

次に、これを使用できます、[ 内部にpublic/cssに追加asset()]

<link href="{{ asset('public/css/app.css') }}" rel="stylesheet">

[時々、それは役に立ちます。]


0

Laravel 4の場合:{!! 二重中かっこ{{
およびLaravel 5以上のバージョンの場合:{!! ハイエンドバージョンでは{{and !!} by}}

JavaScriptをカスタム定義ディレクトリに配置した場合。
たとえば、あなたjQuery-2.2.0.min.jsがディレクトリの下に置かれてresources/views/admin/plugins/js/いる*.blade.php場合は、セクションの最後に次のように追加できます

<script src="{!! asset('resources/views/admin/plugins/js/jQuery-2.2.0.min.js') !!}"></script>

ハイエンドバージョンはローエンドバージョンもサポートしますが、その逆はサポートしません


0

これを行うためのより良い正しい方法:

<link rel="stylesheet" href="{{ asset('assets/css/bootstrap.min.css') }}">

0

Laravel 5.8の場合

<script src="{{asset('js/customPath1/customPath2/customjavascript.js')}}"></script>

ちょうど私のためにトリックを作りました。


0

スクリプトファイルをパブリックディレクトリに配置して使用します(たとえば、userFunctions.jsの場合)

<script type="text/javascript" src="{{asset('js/userFunctions.js')}}">
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.