Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.11.2017 16:03:21

Хелпер asset

Здравствуйте!

Вставляю ссылки на собранные ресурсы так:

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

Поясните, пожалуйста, в чём преимущество использования данного хелпера?
Почему сразу не вставить "/assets/js/script.js".

Сначала мне показалось, что смысл в том, что он указывает именно на папку ассетов.
То есть можно написать asset('js/script.js') и будет сформирован нужный путь.
А потом, если я захочу поменять каталог, то просто в конфиге каком-нибудь укажу новый адрес и все пути на сайте автоматически обновяться.

Но конфига никакого не видать, он просто тупо рисует от корня сайта.
Я не нашёл или может быть какие-то другие выгоды есть?

Не в сети

#2 16.11.2017 16:52:52

Re: Хелпер asset

либо ждать ответа от спецов, либо над твоим сообщением есть кнопка "Поиск" загугли там asset и во всяких разных темах подобное уже обсуждалось. гдето читал.. к примеру https://laravel.ru/forum/viewtopic.php?id=2993 .. можно и там поспрашивать

Не в сети

#3 16.11.2017 21:35:15

Re: Хелпер asset

Насколько я знаю, помощник используется для того, чтобы исключить проблемы, связанные с некоторыми конфигурациями веб сервера. Он создает полный путь, чтобы исключить проблемы с загрузкой JS, CSS, изображений.

Не в сети

#4 20.11.2017 15:15:18

Re: Хелпер asset

sam, AlexeyMezenin, спасибо за ответы!

Как я понял, asset() просто делает абсолютный урл и в большинстве случаев толку от него особенного нет, за исключением моментов:

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

Не в сети

#5 21.11.2017 19:11:26

Re: Хелпер asset

Как я понял, asset() просто делает абсолютный урл и в большинстве случаев толку от него особенного нет, за исключением моментов:

asset() дает возможность централизовано преобразовать относительный адрес к статике в абсолютный. Если ты будешь экономить на символах и просто добавлять слэш в начало URL, то кроме перечисленных нюансов ты получишь и более серьезную проблему - когда захочешь перенести все в CDN (т.е. на другой домен), то вместо изменения 1 функции ты будешь менять все места, где используются эти URL. Зачем?

Не в сети

#6 21.11.2017 19:22:38

Re: Хелпер asset

Ну, это и была моя первая мысль, озвученная в самом начале.
Что я указываю путь внутри некой абстрактной папки assets, а потом в каком-нибудь конфиге могу менять путь к ней прозрачно для шаблонов.
Но, вот, где это настраивать можно, я не нашёл.

Не в сети

#7 21.11.2017 19:30:04

Re: Хелпер asset

<img src="{{ asset(env('THEME')) }}/images/articles/{{ $article->img->mini }}" alt="001" title="001"/>

в файле .env  допиши в конце:

THEME=pink

если я тебя правильно понял, то лично у меня ща на тестовом приложении, в папке public есть папка pink, в которой и находятся все images, css, js и т.д папки
а если нет, то сорян, конец раб дня сижу туплю уже)))

Изменено sam (21.11.2017 19:37:12)

Не в сети

#8 21.11.2017 21:57:55

Re: Хелпер asset

Не, ну здесь мы каждый раз вручную собираем путь из разных переменных, как в старые добрые времена вордпресса.
asset() никак тут не помогает, только root впереди подставляет.
Можно и так написать:

src="{{ asset('') }}{{ env('THEME') }}/images/articles/"

и так:

src="{{ asset(env('THEME').'/images/articles/') }}"

Или в THEME ещё и забить домен и вообще без asset() тоже самое получить.

Профит был бы, если писать просто asset('images/articles'), а он уже сам смотрит в env('THEME').

P.S. А это идеологически правильно напрямую env() дёргать, в обход конфига?

Не в сети

#9 21.11.2017 22:01:10

Re: Хелпер asset

старые добрые времена вордпресса

neutral

Профит был бы, если писать просто asset('images/articles'), а он уже сам смотрит в env('THEME').

Сделай свою функцию для этого.

А это идеологически правильно напрямую env() дёргать, в обход конфига?

Нет.

Не в сети

#10 22.11.2017 10:43:49

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Хелпер asset

  1. Профит был бы, если писать просто asset(’images/articles’), а он уже сам смотрит в env(’THEME’).

Так можно это в мутаторе сделать

PHP
public function getThemeAttribute()
{
    return 
asset(env('THEME') . '/images/articles/');
}

А потом (( $modelName->theme }}
Или как сказал Алексей, сделай метод

PHP
public function getImage($image)
{
    return 
asset(env('THEME') . '/images/articles/' $image);
}

Не в сети

#11 22.11.2017 11:04:26

Re: Хелпер asset

Сделать свой метод никогда не поздно.
Но, раз уж используется фреймворк, хочется писать в единообразном стиле, используя предоставляемые им средства.

Не в сети

#12 01.12.2017 14:03:45

Re: Хелпер asset

Хочу уточнить. Если писать <script src="{{ asset('/js/script.js') }}"></script> место ASSET подставиться абсолютный путь.
Но можно же написать и так <script src="/js/script.js"></script>. И он тоже будет рабочий. Так в чем разница, хочется писать код правильно и необязательно длинным.
Спасибо

Не в сети

#13 01.12.2017 14:54:10

Re: Хелпер asset

Siriuss, ну вот в чём разница, мы в этой теме и пытались выяснить.

Кстати, заметил, что если положить сайт в папку и указать в "app.url" что-то типа "http://example.com/subfolder/", то на asset() это никак не влияет, он пляшет от серверных переменных и всё равно рисует путь "http://example.com/assets/...", а не "http://example.com/subfolder/assets..."

Не в сети

#14 01.12.2017 15:41:31

Re: Хелпер asset

Нашел объяснение!
Asset будет генерировать абсолютный URL. Это будет работать когда вы размещаете свое приложение в корне домена ( http://www.example.com/).
Но если вы размещаете его в подпапке, как http://www.example.com/app/. И когда ваш файл ресурсов будет пытаться загрузиться из корневого каталога = будет получена ошибка, но с помощью функции asset () всегда создается URL, связанный с приложением.

Не в сети

Подвал раздела