Сейчас там у меня не совсем так.... ща покажу там куда по круче всё. PHP: <?php namespace App\Views\Mod; ?> <ul class="menu"> <?php foreach($this->valArray['category'] as $cats) :?> <li class="static-block slideBox"> <a > <?php echo $cats['category_name'];?> </a> <?php include ROOT.'/App/Views/Mod/include/cats.php';?> </li> <?php endforeach;?> </ul> Вот такая запись а в инклуде в итоге тоже код. И это не типа вьюха это реально формирующийся кусок, кода html... Как вот его организовать можешь более явно мне привести пример. Пожалуйста. Вот так у меня вьюхи отдельных от твига модулей делаются. Суть в том, чтобы не писать ни какой навороченный php код а просто сделать вывод во view или это уже не вьюха, а какой то обработчик. Суть в том чтобы сделать html код и передать его как переменную в твиг. А переменная несёт весь html код в виде одной строчки. Там не должно быть создание каких либо функций или массивов, или ещё чего то, архитектура mvc, не просто имеет ведь такую обривеатуру Model View Controller. Вот я и стараюсь не гавнокодить и придерживаться правильности строения, моего приложения. Контроллер Определяет модель и передают данные во view чтобы там сделать вывод html страницы. Только я сделал так сказать двойные вью я строю модели отдельно, а потом собираю из них одну вьюшку с помощью шаблонизатора твиг, на самом деле преимущества такого сбора в том, что если какой либо элемент залагает вся страница попой не накроется, я бы сказал это что-то типа фреймов в html у меня сейчас реализовано. Грубо говоря я делаю отдельный модуль от сайта, который можно потом будет подрубить к любому месту на странице не зависимо так сказать, глобально для всех шаблонов, хоть дублируй, можно ещё фишки на этой почве внести разные с подстановкой разных параметров для вывода той же вьюшки но по другим параметрам к примеру. Ну идея прикольная и уж не знаю на сколько верно я её реализовал.
Лады. Такой вариант будет слишком ёмким. Можно и по-другому: PHP: <?php namespace App\Views\Mod; ob_start(); ?> <ul class="menu"> <?php foreach($this->valArray['category'] as $cats) :?> <li class="static-block slideBox"> <a > <?php echo $cats['category_name'];?> </a> <?php include ROOT.'/App/Views/Mod/include/cats.php';?> </li> <?php endforeach;?> </ul> <?php $output = ob_get_contents(); ob_end_clean();
А если я всё это встрою динамично чтобы всё автоматом было пройдёт так другой файл где подключается данный файл PHP: public function getModule() { ob_start(); require ROOT.'Путь к файлу'; $getModuleContent = ob_get_contents(); ob_end_clean(); return $getModuleContent } // Так же тоже типа проканает? PHP: <ul class="menu"> <?php foreach($this->valArray['category'] as $cats) :?> <li class="static-block slideBox"> <a > <?php echo $cats['category_name'];?> </a> <?php include ROOT.'/App/Views/Mod/include/cats.php';?> </li> <?php endforeach;?> </ul> --- Добавлено --- А по логике вещей ведь это получается дублирование кода на одной и той же странице ?) А чем так плохо дёргать http ? В html же например существуют iframe которые позволяют вставлять другие страницы... Мне кажется это нужная вещь, просто явно как бы не для моего случаю не просто дял вывода в меню, а например скажим так обратиться например к другой странице чтобы там произвести нужные расчёты и много всякой другой лабуды если там целая куча всего, а потом вернуть результат, на эту страницу чтобы не генерировать на одной странице весь php код, вроде бы логике вещей если нагрузка была бы очень большой то разделить на не сколько частей, было бы оптимизированей. --- Добавлено --- Что будет оптимизорваней дёрнуть другую страницу и она в фоновом режиме, на сервере там обновиться и сделает все необходимые запросы к бд, аякс же дёргает по http php файлы, и как бы нормально... Можете мне объяснить что оптимальней ?
Сейчас не понял про дублирование. Факт в том, что мы можем выполнить все инструкции и записать их в переменную, вместо выброса на страницу. основная причина - это скорость. Либо машина php будет обрабатывать страницу, либо ещё лишний раз просить веб-сервер делать запрос. Лишнее звено в цепи. А айфреймы - это что-то из разряда того, когда его придумывали, твоего любимого PSR-4 ещё не было, но ты же понимаешь, что он лучше, нежели чем совсем старые недодуманные стандарты) --- Добавлено --- проверь сам: PHP: $start = microtime(true); // тело скрипта echo 'Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
Так в результате тестов, с PHP: ob_start (); Время выполнения скрипта: 0.030600070953369 сек. И результат который я получил методом PHP: file_get_contents('http://и адрес'); Время выполнения скрипта: 0.23702907562256 сек. Да не вооружённым взглядом видно, и даже телескоп не нужен, что собирать страницу по http запросам на другие страницы, это полная жопень --- Добавлено --- Чувак я даже не знаю тебе больше чем лайк надо поставить Я теперь твой кумир
Было бы забавно. Я вот к примеру не переношу скобку на новую строку при объявлении метода: PHP: public function foo() { } public function bar() { }
@askanim я много сообщений назад писал про ob_start() и что нужно отказаться от http в этом контексте, это я к тому, что когда что-то советуют, попробуй хотя бы сделать тестовый пример самостоятельно, так как не всегда тебе будут давать готовый код, чтобы ты понял.
Я не переношу строку никогда, только делаю пробел между скобками и скобкой PHP: function example() { //body }
Я не влупил, что он делает и решил пока отложить этот вопрос на попозже, но смотрю тут товарищ @mr.akv предложил вариант помощи с объяснением, так что я не стал отказываться и принял его учение. Я теперь буду везде где его видеть ставить лайк --- Добавлено --- А у меня приверженности такой нет, я просто иногда делаю и так и так... Как по мне так без разнице вообще... По мне так важна табуляция, перенос строк и комментирование кода.
Переносить скобку на новую строку смысл имеет для удобства чтения сфолженного кода. Если сигнатура функции/метода или условие условного или циклического оператора содержат многобукв, то свёрнутый код будет справа от этой бесконечной строки. И всегда будет неравномерно справа. При переносе же фигурной скобки - окажется под ней. И всегда будет оказываться на одном отступе.