Таблицы стилей Laravel и javascript не загружаются для небазовых маршрутов

Хорошо - я знаю, что это действительно элементарная проблема, но я не могу ее понять. Это вопрос по 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".

Итак, очевидно, что теперь он ищет css внутри папки «about», которая, конечно же, не является папкой.

Я просто хочу, чтобы он искал активы в одном и том же месте независимо от маршрута.


person Pete    schedule 05.03.2013    source источник
comment
Отвечает ли это на ваш вопрос? Используете CSS в представлениях Laravel?   -  person Pedram    schedule 15.04.2021


Ответы (19)


Для Laravel 4 и 5:

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

URL::asset будет ссылаться на ваша папка project/public/, так что закидывайте туда свои скрипты.


Примечание: для этого вам необходимо использовать "Blade шаблонизатор ". Файлы Blade имеют расширение .blade.php.

person gan    schedule 15.05.2013
comment
Просто подтверждаю, что он работает и в Laravel 5 и 5.1. Спасибо. - person Filip Filipović; 15.06.2015
comment
Я создал свой собственный пакет. можно внутри css? если да, то как я могу включить CSS из моего собственного пакета? - person chourn solidet; 15.07.2016
comment
Вы также можете использовать asset() вспомогательный метод Instance URL::asset(). Он делает ту же работу. - person Marek Skiba; 06.11.2016
comment
Также работает в Laravel 5.4. - person user3426112; 03.03.2017
comment
Что делать, если вы хотите, чтобы уменьшенная версия находилась в производстве, но не в разработке? - person geoidesic; 08.03.2017
comment
Пользуюсь им уже какое-то время. Также работает для Laravel 5.6. - person FONGOH MARTIN; 24.10.2018
comment
Это решение также можно просмотреть в работающем контейнере для отладки здесь - person ; 25.01.2019
comment
Работает и на Laravel 6 - person Бекзод; 19.12.2019

Laravel 4

Лучший и правильный способ сделать это

Добавление CSS

HTML :: style будет ссылаться на ваш проект / общедоступную / папку

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

Добавление JS

HTML :: script будет ссылаться на ваш проект / общедоступную / папку

{{ HTML::script('js/script.js') }}
person mXX    schedule 29.09.2013

Вы используете относительные пути для своих ресурсов, измените их на абсолютный путь, и все будет работать (добавьте косую черту перед «css».

<link rel="stylesheet" href="/css/app.css" />
person Alexandre Danault    schedule 05.03.2013
comment
Это не сработает, если ваше приложение находится в подкаталоге сайта. Затем вы сталкиваетесь с проблемой, когда смотрите слишком далеко в поисках своих активов. Я рекомендую использовать решение, предоставленное @Chris. Это избавляет от ВСЕХ догадок и позволяет перемещать приложение куда угодно, при этом гарантируя, что оно будет правильно загружать ресурсы. - person Tim F; 29.07.2013

в Laravel 5
есть 2 способа загрузить файл js в ваше представление
первый - использовать помощник html, второй - помощники ресурсов.
чтобы использовать помощник 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') !!}

это будет искать ваш файл test.js в вашем каталоге project_root / public / js / test.js.
//////////////////////////// //////////////////////////////////// Для использования помощников по ассетам вместо html-помощников у вас есть чтобы написать что-то подобное в ваших файлах просмотра:

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

это будет искать файл test.js в каталоге project_root / resources / assets / test.js

person Salar    schedule 03.05.2015
comment
Световой / html был оставлен. Вместо этого пользователь laravelcollective / html. - person geoidesic; 08.03.2017
comment
Вы также можете использовать <script src="{{ url(asset('test.js')) }}"></script> (или <script src="{{ url(mix('test.js')) }}"></script>, если вы используете Laravel Mix). - person snipe; 26.09.2017

Если вы используете Laravel 3 и ваши файлы CSS / JS внутри общей папки, как это

public/css
public/js

то вы можете вызвать их, используя шаблоны Blade, например

{{ HTML::style('css/style.css'); }}
{{ HTML::script('js/jquery-1.8.2.min.js'); }}
person Fernando Montoya    schedule 05.03.2013

я предлагаю вам включить его в фильтр маршрутов, прежде чем на {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, управление документами по активам

person Andry Yosua    schedule 22.05.2013
comment
да, этот новый laravel все усложняет, ресурсы, даже профилировщик, больше не включены в документацию .. - person Andry Yosua; 09.07.2013

в 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">
person fravemel    schedule 12.03.2014

Laravel 5.4 с помощником по смешиванию:

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

В Laravel 5.7 поместите файл CSS или JS в каталог Public.

Для CSS:

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

Для JS:

<script type="text/javascript" src="{{ asset('bootstrap.js') }}"></script>
person Innocent TRA BI    schedule 14.11.2018

На мой взгляд, лучший способ добавить тег BASE в свой HTML

<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>

на ваш взгляд, и он будет работать.

Этот метод будет работать с URL-адресами RESTful и статическими ресурсами, такими как изображения, CSS и скрипты.

person vinsa    schedule 01.11.2014

Винса почти все сделала правильно, ты должен добавить

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

и скрипты должны идти своим обычным путем

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

Причина этого в том, что изображения и другие объекты с относительным путем, такие как источник изображения или запросы ajax, не будут работать правильно без прикрепленного базового пути.

person Cptmaxon    schedule 06.01.2016

Если вы делаете это жестко, вам, вероятно, следует использовать полный путь (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 генерировать правильный путь для вас в любой среде.

person mckendricks    schedule 06.03.2013

Лучший способ использовать лайк,

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

Предположим, вы не переименовали свою общую папку. Ваши файлы 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>
person Hafsul Maru    schedule 30.05.2017

Просто добавьте еще одну проблему:

Если вы хотите удалить /public из своего проекта с помощью .htaccess,

тогда вы можете использовать это, [Добавить public перед /css внутри asset()]

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

[Иногда это полезно.]

person Maniruzzaman Akash    schedule 20.10.2017

Для Laravel 4: {!! для двойной фигурной скобки {{
и для Laravel 5 и более поздних версий: вы можете заменить {!! by {{and !!} by}} в более дорогой версии

Если вы поместили JavaScript в пользовательский каталог.
Например, если ваш jQuery-2.2.0.min.js находится в каталоге resources/views/admin/plugins/js/, то из _3 _ вы сможете добавить в конце раздела как

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

Поскольку версия Higher-End также поддерживает версию Low-End, но не наоборот

person Nɪsʜᴀɴᴛʜ ॐ    schedule 20.08.2018

Лучший и правильный способ сделать это:

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

В Laravel 5.8

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

просто сделал трюк для меня.

person oceceli    schedule 13.07.2019

поместите файл сценария в общедоступный каталог, затем используйте (например, для userFunctions.js)

<script type="text/javascript" src="{{asset('js/userFunctions.js')}}">
person Community    schedule 28.07.2019