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

Хорошо. Я знаю, что это действительно элементарная проблема, но я не могу понять. Это вопрос о Ларавеле.

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

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

Он отлично работает, когда я на одном уровне маршрута, например / о , но перестает работать, когда я иду глубже, например / about / me .

Если я посмотрю на консоль разработчика Chrome, я вижу некоторые из следующих ошибок (только для более глубоких маршрутов):

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

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

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

Для Laravel 4 и 5:

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

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

Примечание. Для этого вам нужно использовать шаблоны клинков. Все шаблоны Blade должны использовать расширение .blade.php.

Laravel 4

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

Добавление CSS

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

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

Добавление JS

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

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

Я предполагаю, что вы используете Laravel 3, если да, добавьте ваши файлы CSS / JS в общую папку, например

 public/css public/js 

и назовите его с помощью шаблонов Blade

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

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

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

в Laravel 5 ,
есть два способа загрузки js-файла в ваш вид
сначала используется html-помощник, во-вторых, используется помощник по активам.
для использования html-помощника вы должны сначала установить этот пакет через командную строку:

 composer require illuminate/html 

то вам нужно его обновить, поэтому перейдите в config / app.php и добавьте эту строку в массив поставщиков

 'Illuminate\Html\HtmlServiceProvider' 

то вам нужно определить псевдонимы для вашего пакета html, поэтому перейдите в aliases array в config / app.php и добавьте это

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

теперь ваш html-помощник установлен так, что в ваших файлах просмотра лезвия вы можете написать это:

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

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

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

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

Я предлагаю вам поместить его на фильтр маршрута раньше в {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 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"> 

Лучший способ, по-моему, добавить тег 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> 

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

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

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

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

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

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

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

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

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

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

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

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

Предположим, вы не переименовали свою общую папку. Файлы 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> 

Просто добавьте еще один вопрос:

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

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

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

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