Гуру, я не знаю что такое MVC в PHP, хоть и считаю себя опытным программистом. Объясните наконец!

Духовность™

Продвинутый новичок
1. Нет нужды везде писать "<?php ?>" и нормальное обращение к массивам: "{$array.key.subkey}" - пожалуй, это основные определяющие моменты для большинства разработчиков.
Вам самому не смешно такую ахинею писать?

. При использовании PHP для вывода HTML возникает дилемма - написать:
PHP:
<?php
foreach($items as $item)
{
?>
	html html <?php echo $var1 ?> html <?php echo $vaк2 ?> html
	html <?php echo $var3 ?> html
	html html <?php echo $var4 ?> html <?php echo $var5 ?> html
<?php
}
?>
или
PHP:
<?php
foreach($items as $item)
{
	echo "html html {$var1} html {$var2} html";
	echo "html {$var3} html";
	echo "html html {$var4} html {$var5} html";
}
?>
С шаблонизатором таких дилемм не возникает
У больных тоже дилемма - на луну выть или пол лизать в психушке. У нормальных людей, включающих мозг, такой дилеммы не возникает.
 

rvolt

Новичок
Вам самому не смешно такую ахинею писать?
У больных тоже дилемма - на луну выть или пол лизать в психушке. У нормальных людей, включающих мозг, такой дилеммы не возникает.
Во-первых вы не пояснили, в чем именно ахинея?
Во-вторых, я имел в виду, что дилемма воникает только в случаях когда использовать <?php echo $var; ?> и всякие <?php if(): ?> становится неудобно в виду их большого количества, необходимости писать много условий и бывает проще делать весь вывод напрямую <?php foreach() { echo ... } ?>

ps.: я смотрю у вас хорошие познания о том, чем занимаются больные люди.
 

Духовность™

Продвинутый новичок
Во-первых вы не пояснили, в чем именно ахинея?
ахинея считать, что
PHP:
{$array.key.subkey}
хорошо, а
PHP:
<?=$array['key']['subkey']?>
плохо.

Ахинея считать, что разработчику тяжело написать
PHP:
<?php ?>
Что конструкция
PHP:
{if $logged_in}
    Welcome, <font color="{#fontColor#}">{$name}!</font>
{else}
    Hi, {$name}!
{/if}
лучше чем
PHP:
<? if ($logged_in): ?>
    Welcome, <font color="<?=$fontColor?>"><?=$name?>!</font>
<? else: ?> 
    Hi, <?=$name?>!
<? endif; ?>
и т.д.

Нет, я правда не понимаю, откуда берется такое тотальное мозгоебство в теме шаблонов. Подозреваю, что это результат работы некоторых статей, которые в т.ч. и на phpclub-e публиковались. 10 лет навязывалось мнение, что PHP нельзя писать в HTML. Не логику приложения, а именно PHP. В результате выросло поколение разработчиков, которые тупо не понимают что делают.

Во-вторых, я имел в виду, что дилемма воникает только в случаях когда использовать <?php echo $var; ?> и всякие <?php if(): ?> становится неудобно в виду их большого количества, необходимости писать много условий и бывает проще делать весь вывод напрямую <?php foreach() { echo ... } ?>
О чем вы говорите? Какая дилемма? Нет никакой дилеммы. Это у Вас дилемма, придуманная Вами же. Вам неудобно писать "всякие <?php if(): ?>"? Не занимайтесь программированием, там часто приходится писать подобное.
 

craz

Нестандартное звание
Духовность™
резче чем я о_0)) но согласен на все 1005000%
 

AmdY

Пью пиво
Команда форума
а я уже наелся php шаблонов, больше не буду использовать в своих проектах, осталось только придумать чем заменить.

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

а в остальном спор выежденого яйца не стоит, просто стоит называть паттерн web mvc и не загоняться на каждой букве, а просто следовать идее - деление на слои, где каждый занимается своим делом и может взаимодействавоть с другим на уровне минимального интерфейса.
 

Alien85

I like my cat
логика в шаблонах была, есть и будет. Она там должна быть - это логика вида.
логика - шаблон
самим не смешно? смысл слов совершенно разный.

с шаблонизатором, шаблон натягивают на движок.
а без шаблонизатора вы натягиваете php код на шаблон.

вы тут стараетесь так четко разделить M, V и C, что совсем забываете об удобстве и здравом смысле.
да и что мешает разделить View на 2 части?

MVC - это не стандарт программирования, а всего лишь паттерн.
 

rvolt

Новичок
Подозреваю, что это результат работы некоторых статей, которые в т.ч. и на phpclub-e публиковались. 10 лет навязывалось мнение, что PHP нельзя писать в HTML. Не логику приложения, а именно PHP.
Против PHP в HTML ничего не имею, но просто привык использовать шаблонные движки. Приходилось работать и с голым PHP, и с шаблонными движками. Если честно, то пытался отказаться от шаблонных движков ещё года 4 назад, но как-то не получилось.

То что шаблонизатор функционально ничего принципиально нового не дает - полностью согласен.

Да, мне удобнее писать {$array.key.subkey}, чем <?=$array['key']['subkey']?>.

То что есть дополнительный оверхед, тоже согласен, но шаблоны выглядят просто "чище", чем аналогичный PHP код.

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

AmdY

Пью пиво
Команда форума
rvolt
шаблон - это то, что прислал верстальщик, как только ты всавил туда <?=$var?> или {$var} - это уже view и это уже УГ, потому что появляется проблема программист-верстальщик. в идеале шаблоны должны оставаться неизменными и процес должен проходить так:
PHP:
// controller
$this->getView()->set('var', $var);
$this->getViews()->render('template');
// view
$this->token('p#var', $this->get('var'))
// template
<p id="var">рыба верстальщика</p>
 

Gas

может по одной?
AmdY
ну и классика, покажи пример полосатой таблицы при таком подходе.

Всё таки более распространённый метод (УГ в твоём смысле) мне как-то больше нравится.
 

Духовность™

Продвинутый новичок
логика - шаблон
самим не смешно?
От чего смеяться?
Есть логика приложения, есть логика отображения. Логика приложения - это вычисления программы, вытягивание данных из БД.
Логика отображения - это решать, какой кусок HTML кода показывать на основе этих данных. Что тут сверхестественного? Если мы получили пустой массив - показать "Извините, пусто". Если полный - показать таблицу из кучи HTML кода. Это - логика отображения. И не путайте её с логикой приложения.

с шаблонизатором, шаблон натягивают на движок.
а без шаблонизатора вы натягиваете php код на шаблон.
теперь расскажите мне, чем шаблонизатор Smarty отличается от шаблонизатора по имени PHP. Мне очень интересно знать.
 
  • Like
Реакции: craz

Gas

может по одной?
Smarty отличается от шаблонизатора по имени PHP
Ключевые отличия:
1. сложнее выстрелить себе в ногу, то-есть сложнее в шаблон перенести несвойственную ему логику. Понятно что разруха в головах, а не клозетах, но когда появляется новый человек в команде - всё таки может быть фактором;
2. Следствие первого пункта - безопасность, когда шаблон может правиться не разработчиком системы, а клиентом. Например, какой-то SaaS сервис, где у клиентов нет доступа к коду, но есть к каким-то шаблонам и очень не хочется чтоб начали писать exec(rm -R /) и т.д.

p.s. мне без разницы что использовать, больше pure php шаблоны, но и smarty при необходимости (пункт 2) не чураюсь.
 

Духовность™

Продвинутый новичок
сложнее выстрелить себе в ногу, то-есть сложнее в шаблон перенести несвойственную ему логику. Понятно что разруха в головах, а не клозетах, но когда появляется новый человек в команде - всё таки может быть фактором;
А Вы не боитесь, что человек принесет оружие и выстрелит вам в висок?
В языке, где есть масса способов выстрелить в ногу и вообще, убиться насмерть, нативная шаблонизация - не самое худшее.
Поймите, Вы сейчас ищите повод. А если, а если... Это не аргумент против шаблонизации на PHP .

когда шаблон может правиться не разработчиком системы, а клиентом.
Это один из десяти тысяч случаев. Даже обсуждать таких сферических коней не хочется.
 
  • Like
Реакции: craz

Gas

может по одной?
А Вы не боитесь, что человек принесет оружие и выстрелит вам в висок?
на ты,
неудачная аналогия, так-как вероятность этого низка, больше подойдёт -- не боишься оставлять бумажник/телефон в кафе на столе, пока сам идёшь поссать, ты пришёл сам, а в кафе куча народу, пусть даже на вид все и приличные. Шанс остаться без телефона очень велик.

Это один из десяти тысяч случаев. Даже обсуждать таких сферических коней не хочется.
странная логическая цепочка, "мне это не нужно было > значит не нужно никому". Я сталкивался с подобной ситуацией, не раз. Smarty самый простой выход дать доступ к шаблонам, при этом знать что проект не поломают в считанные пикосекунды.

Это не аргумент против шаблонизации на PHP .
я не ищу повод, в 95% моих проектов шаблонизация на php, но случаи разные бывают.
 

Духовность™

Продвинутый новичок
неудачная аналогия, так-как вероятность этого низка
так берите в команду адекватных людей и все будет ок. Я же не говорю, что PHP плох лишь потому, что какой-то идиот начнет в контроллере plain sql писать, минуя модели и прочие слои.

странная логическая цепочка, "мне это не нужно было > значит не нужно никому". Я сталкивался с подобной ситуацией, не раз.
если нужно клиенту менять шаблоны, то как правило делают максимально простые вещи, далекие от программирования. Какие-нибудь вставки типа {var}. Ибо давать клиенту доступ к шаблонам - это вообще типичное самоубийство.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Ключевые отличия:
2. Следствие первого пункта - безопасность, когда шаблон может правиться не разработчиком системы, а клиентом. Например, какой-то SaaS сервис, где у клиентов нет доступа к коду, но есть к каким-то шаблонам и очень не хочется чтоб начали писать exec(rm -R /) и т.д.
А если он вставит в smarty-шаблон iframe с сиськами?
 

Gas

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

Ибо давать клиенту доступ к шаблонам - это вообще типичное самоубийство.
Да, так и есть. В 99% это не нужно и не делается, но есть проекты где всё таки приходится дать возможность кастомизации именно шаблонов с логикой отображения. Причём их может и править никто никогда не будет, но есть требования и всё тут.

А если он вставит в smarty-шаблон iframe с сиськами?
а пусть вставляет, хоть ч**ен поперёк страницы, контент уже на совести клиента
 

craz

Нестандартное звание
а если удалить большой тпльник? прям тупо так взять и удалить? клиент может и зал отвечает " ООООООО ДАААААААААА!!!!!!!!!!!!!" короче от идиота не защитишься, и писать приложение ориентированное на допиливание клиентом - не уважать не себя не клиента.

приложение должно быть написано так чтобы за мельчайшие изменения клиенту было выгоднее вам заплатить н денег чем самому лезть на фтп вот и все. А если оно написано с приметой на то что у нас клиент ептить подвал может с шапкой менять да ну его наф. Я уже больше двух лет не даю клиентам фтп - отдаю хостинг данные и все - ибо нех там лазить, если что-то поправить и оно займет 2 минуты я и сам не обламлюсь - сарафанное радио опять же, если что-то тяжелое, извольте - сами вы нефика не сделаете.
 

Gas

может по одной?
цель не чтоб клиент не поломал свою версию, да пусть хоть все шаблоны пустыми сделает или ошибки smarty-синтаксиса наставит - флаг в руки.
цель (требование к проекту, отмахнуться нельзя) - дать возможность менять шаблоны, включая логику отображения, при этом клиент не должен иметь возможность запуска произвольного кода. В этом случае можно (не обязательно), а именно можно использовать smarty в котором уже есть инструменты ограничивающие фантазию правящего код. И с большой долей вероятности это лучше чем писать свой велосипед.
 
Сверху