Уважаемые Профи данного форума и все кто себя ими считает, да и вообще все, представляю вашему вниманию новый только что сделанный велосипед. Прошу покритиковать кому не лень, желательно подробно. Пример работы тут. Работает авторизация и регистрация, на этом решил пока остановиться, до выяснения. PS у попова не учился, если по коду будет заметно обратное, брошу все и уйду в монастырь ))
Это чо хоть такое-то? Добавлено спустя 1 минуту 28 секунд: непонятно, а регистрироваться не охота. А код читать тоже, т.к. не понятно, что это в принципе =)
Особенности распиши. Что умеет, чем лучше других. Мне достаточно пустого README чтобы стало лень смотреть дальше )))
да он ничем не лучше, и еще в принципе не доделан, есть минимальная функциональность которая позволяет отображать страницы, есть авторизация и регистрация. хотелось бы, чтобы люди понимающие в пхп больше меня посмотрели код и чуть чуть его покритиковали.
Ок. Тогда пара вопросов чтобы задать тебе курс развития: - Придерживаешся ли ты каких-то стандартов кодирования? - Насколько сильно связаны отдельные компоненты, можно ли подключить что-то одно через composer? - Используешь ли пространства имен, генераторы, примеси и т.д.? - Добавляет ли твой класс БД какое-то удобство плюсом к тому что дает mysqli/PDO? - То же самое с Представлением: чем лучше варианта "без микрофреймворка"? - Говоришь есть авторизация, покажи минимальный набор кода чтобы ограничить доступ к одной странице. То же ко всем страницам в "папке".
- PSR-1 если ты об этом - про composer слышал но как пользоваться не знаю, поэтому скорее всего нет - генераторы, примеси - нет, пространства имен не знаю стоит ли, есть класс autoload, который со своей задачей автозагрузки классов справляется - в результате всех манипуляций select выглядит так $user = user_mapper::get()->get_user_by_login($user_login); insert так user_mapper::get()->add_user($user_login, $user_name, $user_email, password_hash($user_password, PASSWORD_DEFAULT), 1); - представление состоит из шаблона index и блоков которые к шаблону подключаются. примерно так выглядит: в контроллере добавляются блоки которые необходимо показать на странице Код (PHP): <span class="syntaxdefault"><br /> if</span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> render</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">add_content</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">id блока</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> имя файла блока</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> else<br /> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> render</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">add_content</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">id блока</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> имя файла блока</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"></span> в шаблоне эти блоки отображаются Код (PHP): <span class="syntaxhtml"><br /><div class="col-md-4"><br /> <span class="syntaxdefault"><?php echo render</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">get_content</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">id блока</span><span class="syntaxkeyword">)</span><span class="syntaxdefault">?><br /></span></div><br /></span> - доступ ограничивается пока переменной в SESSION к каждой странице отдельно Код (PHP): <span class="syntaxdefault"><br /></span><span class="syntaxkeyword">if(!isset(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'1'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> <br /></span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'controller'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'main'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'action'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'index'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'params'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'messages'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'access_denied'</span><span class="syntaxkeyword">]];<br />}<br /></span><span class="syntaxdefault"></span> этот код вернет не авторизованного пользователя на главную и выведет ошибку
шаблон index.php разделен на области, примерно так Код (PHP): <!DOCTYPE html> <html lang="en"> <head> </head> <body> <div class="container"> <div> <?php echo render::get()->get_content('navigation')?> </div> <div> <?php echo render::get()->get_content('user_info')?> </div> <div> <?php echo render::get()->get_content('left_panel')?> </div> <div> <?php echo render::get()->get_content('content')?> </div> </div> </body> </html> чтобы показать страницу нужно в контроллере загрузить блоки этой страницы Код (PHP): <span class="syntaxdefault"><br />class dictionaries_controller<br /></span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> function actionUsers</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> render</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">add_content</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'user_info'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'user_info'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> render</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">add_content</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'content'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'user_list'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br />}<br /> </span><span class="syntaxdefault"></span> в общем id блока это место блока на странице. как то так кстати что лучше использовать Код (PHP): <span class="syntaxdefault"><br /> ob_start</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> echo </span><span class="syntaxstring">'asd'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> $content </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ob_get_contents</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> ob_end_clean</span><span class="syntaxkeyword">();<br /> </span><span class="syntaxdefault"></span> или Код (PHP): <span class="syntaxdefault"><br /> $arr </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> array_push</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$arr </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'asd'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> $content </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> implode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $arr</span><span class="syntaxkeyword">);<br /> </span><span class="syntaxdefault"></span> PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Чего так сложно и длинно? можно было тупо метки придумать какие. Код (PHP): <?php echo render::get()->get_content('navigation')?> я у себя это сделал так: Код (Text): [[*navigation]]
ну я представляю себе работу с метками так: записать шаблон в переменную -> найти метку -> заменить на соответствующий контент -> показать шаблон, может у тебя не так конечно ))
Ну эта операция очень быстрая. В пхп есть специальная функция, она даже ест массивы. Никаких сложностей. Т.е. это одна строка кода.
Да я и не говорю что сложности есть, просто действий меньше. У меня в контроллере записываются блоки для страницы и показывается шаблон. Я делал с метками, так че то мне проще показалось ))
Пых должен крутиться над всем, приложение для сайтов, должно работать с шаблонами js,css,html. Мы можем менять все на ходу, нужен удобный динамический шаблонизатор. Следовательно - можем кешировать области скриптов, создаваемые динамически (удаляя их: в ручную, из панели кеша, событием) - если в этом будет необходимость. Придумайте для себя, что Вам будет удобно, этим и пользуйтесь, главное логически поделите все на части, чтобы не запутаться, распишите все, что Вам необходимо, а потом уже делайте вывод и пишите. Я для себя придумал, такой вариант: index.php: Код (PHP): $this->file('index'); $this->tag('{charset}','utf-8'); $this->tag('{title}','Главная'); $block2=array( 1=>'One', 2=>'Two', 3=>'Three' ); foreach($block2 as $key => $value) { $this->struct('block2',array( '{i}'=>$key, '{value}'=>$value )); } if('replace'===$this->get('url')) { $this->struct('block1','Replacement...'); } if('hide'===$this->get('url')) { $this->struct('block1'); } $this->parse('index'); echo $this->html('index'); index.html: Код (PHP): <!DOCTYPE html> <html> <head> <meta charset="{charset}"> <title> {title} </title> </head> <body> {block1} <div> {block2} <p> {i}. {value} </p> {/block2} </div> {/block1} </body> </html> Вывод: Код (PHP): <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Главная </title> </head> <body> <div> <p> 1. One </p> <p> 2. Two </p> <p> 3. Three </p> </div> </body> </html> Можно и проще, что - то придумать, да что угодно... У igordada тоже норм. Я все не могу никак доума довести, по этому ничего и не вылаживаю... Времени на это все нужно много...
Так я и выложил чтоб мне мои косяки показали, а че то лень всем У вас я так понимаю на каждую страницу шаблон?
Лень разбираться в Вашем велосипеде, без описания, без проектирования. Терять время? Не каждый захочет. Есть шаблон -> шаблонные файлы -> структура (мы можем разделять файл на блоки, каждый блок мы можем отдавать на разных страницах, а также заменять, скрывать, показывать) - не обязательно делать каждой странице новый шаблон, можете сделать и один шаблонный файл. Вы придумайте для себя всю логику на листочке - увидите вам проще будет потом писать, попробуйте, чиркать придется много, Вам понравится
Ну тут одно из двух или я вас не понимаю или вы меня )) у меня так и работает есть один шаблон, можно сравнить с masterpage из аспнет в нем плейсхолдеры вида <?php echo render::get()->get_content("id области")?> в который можно поставить любой блок, можно по условию их показывать, выполняется - один блок, не выполняется - другой. сами блоки лежат в отдельных файлах пример блока Код (PHP): <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php $users </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> user_mapper</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">get_users</span><span class="syntaxkeyword">()</span><span class="syntaxdefault">?></span> //получает массив с пользователями<br /><span class="syntaxdefault"><?php $list1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> module_linked_table</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">create</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$users</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// создает таблицу <br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'controller'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'dictionaries'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'action'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'user'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'col_ind'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'id'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'col_link'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> <br /> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'class'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'table'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'ID'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Name'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Login'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Email'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Role'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault">?><br /><?php module_block</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">set_content</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$list1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault">?></span> //запихивает ее в див<br /><span class="syntaxdefault"><?php echo module_block</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">create</span><span class="syntaxkeyword">([</span><span class="syntaxstring">'class'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'table table-bordered'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault">?></span> //выводит <br /></span> можно html теги в блоке писать другой блок Код (PHP): <span class="syntaxhtml"><br /><div class="col-md-4"><br /> <span class="syntaxdefault"><?php $user </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> user_mapper</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">get_user_by_id</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'user_id'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault">?><br /></span> <span class="syntaxdefault"><?php echo </span><span class="syntaxstring">'Hello <a href="/dictionaries/user?id='</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'user_id'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'">'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$user</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'</a>'</span><span class="syntaxdefault">?><br /></span> </div><br /> <div class="col-md-8"><br /> <form class="form-inline" action="/user/logout" method="post"><br /> <button type="submit" class="btn btn-primary btn-sm"><br /> Выход<br /> </button><br /> </form><br /></span> как то так ))
Ну по мне лучше php писать отдельно от html. По этому у меня html'a в php нет, у меня html логически поделен на секции, а php обрабатывает.
А в чем проблема? К примеру в Laravel при запросах к БД через EloquentORM возвращается на массив, а Collection, который изнутри - один большой хелпер над пыховским разнобоем функций по работе с массивом, а снаружи довольно удобный интерфейс, близкий по духу к самой ORM. В итог получается что-то типа этого: Код (PHP): <ul> <?php foreach($rows as $row) :?> <li> <?= $row->price ?> </li> <?php endforeach; ?> </ul> <?= $rows->sum('price') ?> Конечно, для экономящих на спичках тут на лицо оверхед, но на деле мы получаем чистый код, не замутненный бизнес-логикой )
Код (PHP): <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php $list </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> module_list</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">get</span><span class="syntaxkeyword">()-></span><span class="syntaxdefault">create</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$rows</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'class'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'list-group-item list-group-item-info'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault">?><br /><?php echo $list?><br /></span></span>
Так не об этом. Я такой код регулярно пишу. Но человек пишет, что он "отделяет php от html", а это php чистой воды