Laravel по-русски

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

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

#1 24.07.2013 16:13:26

Как передать изображение в ссылку Blade

{{ HTML::link("collection/$mfc->id",HTML::image("images/manufacturers/$mfc->logo", $mfc->title)) }}

так не получается

Изменено umarov (24.07.2013 17:01:30)

Не в сети

#2 24.07.2013 16:14:32

Re: Как передать изображение в ссылку Blade

вернее получается

<a href="http://primo()ru/collection/1">
<img src="http://primo()ru/images/manufacturers/ABK.jpg" alt="ABK">
</a>

вот так выглядит но отображается как текст

Изменено umarov (24.07.2013 17:01:18)

Не в сети

#3 24.07.2013 16:59:30

Re: Как передать изображение в ссылку Blade

Используй, пожалуйста, [code] — я за тобой уже три поста правил.

Не в сети

#4 24.07.2013 17:02:07

Artdevue
Откуда: Kiev
Сообщений: 119
Сайт

Re: Как передать изображение в ссылку Blade

https://github.com/laravel/laravel/issues/1297
Я бы создал свой Хелпер и написал там свою функцию.

Изменено Artdevue (24.07.2013 17:03:47)


If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.

Не в сети

#5 24.07.2013 17:03:25

Re: Как передать изображение в ссылку Blade

Proger_XP пишет:

}%Используй, пожалуйста, - я за тобой уже три поста правил.

извини не знал. А на мой вопрос не ответишь?

Не в сети

#6 24.07.2013 17:09:17

Re: Как передать изображение в ссылку Blade

Artdevue пишет:

https://github.com/laravel/laravel/issues/1297
Я бы создал свой Хелпер и написал там свою функцию.

HTML::decode(HTML::link('#', HTML::image('img/file.jpg')));

спасибо помогло

Изменено umarov (24.07.2013 17:09:39)

Не в сети

#7 24.07.2013 17:09:33

Artdevue
Откуда: Kiev
Сообщений: 119
Сайт

Re: Как передать изображение в ссылку Blade

umarov пишет:

А на мой вопрос не ответишь?

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


If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.

Не в сети

#8 24.07.2013 17:10:30

Re: Как передать изображение в ссылку Blade

Artdevue пишет:

А вот если не нашли или не поняли, при этом указав, вот нашол или не нашол, помогите...
А так - считаю тупые вопросы задаются. Извините. если обидел кого.

Искал, но не так как нужно видимо

Не в сети

#9 24.07.2013 17:13:52

Artdevue
Откуда: Kiev
Сообщений: 119
Сайт

Re: Как передать изображение в ссылку Blade

umarov пишет:

Искал, но не так как нужно видимо

Окей smile, ну, тогда хотя бы про это упомянули, что искал и не нашол...  Просто часто задают вопросы даже не пробуя найти ответ в инете.


If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.

Не в сети

#10 24.07.2013 19:10:28

Re: Как передать изображение в ссылку Blade

Увы, согласен с Artdevue. У меня волосы дыбом встают. Вы действительно считаете PHPHTML::decode(HTML::link('#'HTML::image('img/file.jpg'))); ответом?

Вот что здесь происходит:

  1. Создаётся HTML для картинки: xml<img src="..." ...>
  2. Создаётся код для ссылки, при этом второй аргумент трактуется как текст и экранируется. Это «by design».
  3. Полученный код вида xml<a ...>&lt;img ...&gt;</a>… декодируется!

А теперь подумаем, зачем вообще используется экранирование HTML. А потом выполним такой код:

PHP
HTML::decode(HTML::link('<oops"...>'HTML::image('img/file.jpg')));

В результате имеем некорректный HTML. А если не повезёт — то XSS или ещё что-то подобное.

Методы HTML изначально рассчитаны на экранирование всего ввода, который им передаётся. Это их особенность, всё равно как передача пути к файлу в PHPfile(), а не массива, простой строки или ещё чего-то. Если такое поведение не подходит — почему бы не написать макрос (как уже посоветовали) или просто собрать строку «вручную»? Ведь здесь даже код не экономится, скорее наоборот:

xml<a href="{{ e(url('#')) }}">{{ HTML::image('img/file.jpg') }}</a>

Не в сети

#11 24.07.2013 22:12:38

umarov123

Re: Как передать изображение в ссылку Blade

Увы, согласен с Artdevue. У меня волосы дыбом встают. Вы действительно считаете PHPHTML::decode(HTML::link('#'HTML::image('img/file.jpg'))); ответом?

Вот что здесь происходит:

  1. Создаётся HTML для картинки: xml<img src="..." ...>
  2. Создаётся код для ссылки, при этом второй аргумент трактуется как текст и экранируется. Это «by design».
  3. Полученный код вида xml<a ...>&lt;img ...&gt;</a>… декодируется!

А теперь подумаем, зачем вообще используется экранирование HTML. А потом выполним такой код:

PHP
HTML::decode(HTML::link('<oops"...>'HTML::image('img/file.jpg')));

В результате имеем некорректный HTML. А если не повезёт — то XSS или ещё что-то подобное.

Методы HTML изначально рассчитаны на экранирование всего ввода, который им передаётся. Это их особенность, всё равно как передача пути к файлу в PHPfile(), а не массива, простой строки или ещё чего-то. Если такое поведение не подходит — почему бы не написать макрос (как уже посоветовали) или просто собрать строку «вручную»? Ведь здесь даже код не экономится, скорее наоборот:

xml<a href="{{ e(url('#')) }}">{{ HTML::image('img/file.jpg') }}</a>

Дело в том что на экране и в коде без экронации все выдавало

#12 25.07.2013 06:52:12

Re: Как передать изображение в ссылку Blade

Не знаю, что ты хочешь этим сказать.

Кстати, я когда-то на форуме уже выкладывал свой класс для генерации HTML — HLEx, в этой теме. Он использует другой подход, нежели стандартный HTML. Например, можно вызывать методы:

PHP
<tag_name> ($content$attributes)

Где:

  • tag_name — имя тега (a, pre, table и пр.)
    • если заканчивается на _q, то content экранируется, иначе — нет
  • content — содержимое, то что между <tag_name>...</tag_name>
  • attributes — массив атрибутов либо строка — она автоматически становится атрибутом, обычно class, но для некоторых тегов (см. $defaultAttributes) это другой атрибут, к примеру для ссылок это href

Итого сабж решается просто:

PHP
HLEx::a(HTML::image('img/file.jpg'), '#')
  => <
a href="#"><img ...></a>

HLEx::a(HTML::image('img/file.jpg'), array('href' => '#''class' => 'cls'))
  => <
class="cls" href="#"><img ...></a>

HLEx::a_q('<foo>''#')
  => <
...>&lt;foo&gt;</a>

Не в сети

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