Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте!
Вставляю ссылки на собранные ресурсы так:
<script src="{{ asset('assets/js/script.js') }}"></script>
Поясните, пожалуйста, в чём преимущество использования данного хелпера?
Почему сразу не вставить "/assets/js/script.js".
Сначала мне показалось, что смысл в том, что он указывает именно на папку ассетов.
То есть можно написать asset('js/script.js') и будет сформирован нужный путь.
А потом, если я захочу поменять каталог, то просто в конфиге каком-нибудь укажу новый адрес и все пути на сайте автоматически обновяться.
Но конфига никакого не видать, он просто тупо рисует от корня сайта.
Я не нашёл или может быть какие-то другие выгоды есть?
Не в сети
либо ждать ответа от спецов, либо над твоим сообщением есть кнопка "Поиск" загугли там asset и во всяких разных темах подобное уже обсуждалось. гдето читал.. к примеру https://laravel.ru/forum/viewtopic.php?id=2993 .. можно и там поспрашивать
Не в сети
sam, AlexeyMezenin, спасибо за ответы!
Как я понял, asset() просто делает абсолютный урл и в большинстве случаев толку от него особенного нет, за исключением моментов:
* когда сайт лежит внутри какого-то каталога на домене, тогда путь будет строиться относительно него.
* внутри писем можно использовать для построения абсолютного урла.
* возможно, когда несколько поддоменов, это может играть роль.
* ну и DI, все дела, можно подменить реализацию, хотя я не знаю, в каком случае это может быть полезно.
Не в сети
Как я понял, asset() просто делает абсолютный урл и в большинстве случаев толку от него особенного нет, за исключением моментов:
asset() дает возможность централизовано преобразовать относительный адрес к статике в абсолютный. Если ты будешь экономить на символах и просто добавлять слэш в начало URL, то кроме перечисленных нюансов ты получишь и более серьезную проблему - когда захочешь перенести все в CDN (т.е. на другой домен), то вместо изменения 1 функции ты будешь менять все места, где используются эти URL. Зачем?
Не в сети
Ну, это и была моя первая мысль, озвученная в самом начале.
Что я указываю путь внутри некой абстрактной папки assets, а потом в каком-нибудь конфиге могу менять путь к ней прозрачно для шаблонов.
Но, вот, где это настраивать можно, я не нашёл.
Не в сети
<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)
Не в сети
Не, ну здесь мы каждый раз вручную собираем путь из разных переменных, как в старые добрые времена вордпресса.
asset() никак тут не помогает, только root впереди подставляет.
Можно и так написать:
src="{{ asset('') }}{{ env('THEME') }}/images/articles/"
и так:
src="{{ asset(env('THEME').'/images/articles/') }}"
Или в THEME ещё и забить домен и вообще без asset() тоже самое получить.
Профит был бы, если писать просто asset('images/articles'), а он уже сам смотрит в env('THEME').
P.S. А это идеологически правильно напрямую env() дёргать, в обход конфига?
Не в сети
старые добрые времена вордпресса
Профит был бы, если писать просто asset('images/articles'), а он уже сам смотрит в env('THEME').
Сделай свою функцию для этого.
А это идеологически правильно напрямую env() дёргать, в обход конфига?
Нет.
Не в сети
- Профит был бы, если писать просто asset(’images/articles’), а он уже сам смотрит в env(’THEME’).
Так можно это в мутаторе сделать
public function getThemeAttribute()
{
return asset(env('THEME') . '/images/articles/');
}
А потом (( $modelName->theme }}
Или как сказал Алексей, сделай метод
public function getImage($image)
{
return asset(env('THEME') . '/images/articles/' . $image);
}
Не в сети
Сделать свой метод никогда не поздно.
Но, раз уж используется фреймворк, хочется писать в единообразном стиле, используя предоставляемые им средства.
Не в сети
Хочу уточнить. Если писать <script src="{{ asset('/js/script.js') }}"></script> место ASSET подставиться абсолютный путь.
Но можно же написать и так <script src="/js/script.js"></script>. И он тоже будет рабочий. Так в чем разница, хочется писать код правильно и необязательно длинным.
Спасибо
Не в сети
Siriuss, ну вот в чём разница, мы в этой теме и пытались выяснить.
Кстати, заметил, что если положить сайт в папку и указать в "app.url" что-то типа "http://example.com/subfolder/", то на asset() это никак не влияет, он пляшет от серверных переменных и всё равно рисует путь "http://example.com/assets/...", а не "http://example.com/subfolder/assets..."
Не в сети
Нашел объяснение!
Asset будет генерировать абсолютный URL. Это будет работать когда вы размещаете свое приложение в корне домена ( http://www.example.com/).
Но если вы размещаете его в подпапке, как http://www.example.com/app/. И когда ваш файл ресурсов будет пытаться загрузиться из корневого каталога = будет получена ошибка, но с помощью функции asset () всегда создается URL, связанный с приложением.
Не в сети
Страницы 1