[PHP] Лекция 8, Домашно - дискусия и решения


13

Колеги, споделям своето решение:

Структурата на проекта ми е следната:

 

Както виждате, в папката public_html имам един единствен файл - index.php. Това ми се явява single entry point в проекта. От там пренасочвам накъдето е необходимо.

Използвал съм кода от домашното, като почти не съм го променял. Моля, не коментирайте решението, т.е. готовото решение, което ни беше дадено, то има доста пропуски.

Ще се радвам да коментирате, критикувате и пишете своите забележки само по новия елемент от домашното, а именно разделянето на бизнес логиката от презентацията. Точно това е моят дял в домашното :).




Отговори



0
Като гледам твоето домашно не разчита 100% на сорс кода, който ни е предоставен. Чудя се, ако използвам моето решение от предишното домашно, дали ще се счете за грешка...

от maniuni (117 точки)


0
Кое точно имаш предвид? Мисля, че само бях променил SQL заявката, за да ми вади всички автори, участващи в една книга, както и би трябвало да бъде.

от georgi.s.yankov (6219 точки)

0
А логин, регистър и коментари към дадена книга отпадат нали? Те бяха към домашното за лекция 7




5

Едно малко по oпростено решение и от мен . Единственото което съм променил е , както е направил колегата Жоро , да променя заявката когато искаш да видиш книги от Автор . 

GitHub


от TeodorTunev (3061 точки)


0
само информативно питам: повече от 5 минути ли ти отне?

от Asa (0 точки)

0
Около 30 минути ми отне да го направя

от TeodorTunev (3061 точки)



1
А според вас кое е по правилно, във файловете с бизнес логиката да изкарваме грешките и съобщенията със echo, или да ги вкараме в един масив и да ги обхождаме във файла с view-то? Защото аз съм ги вкарал в масив който го въртя във view-тата, но гледам, че сте ги изкарали във core файловете и се обърках малко :D

от NasC0 (489 точки)


0
Тези ехо еррори като цяло не са правилния начин за такива грешки , така че не си губи времето да мислиш как да ги направиш :)

от TeodorTunev (3061 точки)

0
Ок, мерси :)

от NasC0 (489 точки)



1

Ето и моето решение - какво ще кажете за него: https://github.com/bgatev/PHP/tree/master/Book%20Store%20With%20Users%20Refactoring


от bgatev (1491 точки)


0
По-удобно ще е ако ти се листват файловете в GIT. Така, за да се прегледа, е необходимо свалянето на целия архив.

от georgi.s.yankov (6219 точки)

0
Това е предното домашно , на седма лекция , тази тема е за 8-ма :) с рефакторирането на кода

от TeodorTunev (3061 точки)



1

И аз съм оформил домашното като колегата Теодор Тунев, ето нагледно как изглежда:


 


от Nikolay_Radkov (2911 точки)


2

GitHub

Ето и моето домашно. Също реших да го направя със single entry point и normal_layout, както беше показано на лекцията.

(Не можах да разбера как да слагам именувани линкове в този форум, може ли някой да подскаже :))

 

Edit. Благодарности, Arabella

 


от Nailses (45 точки)


0
ей така http://screencast.com/t/OItAmOUavzVp :)

от arabella (2576 точки)

0
1. Няма никаква нужда от ред 5 във файла index.php. Така или иначе, при всички случаи, по-надолу в кода ти си инициализираш променливата $page.
2. Ей това не са много красиви пътища '/../../templates/index_public.php'. По-добре си направи константи, които да ти държат някои важни директории. Примерно за директорията "templates", която често използваш.
Поздрави :).
EDIT:
3. Във файла add_book.php това, което въобще не използваш по-натам е: - $data['css'] - $data['authors'] - $data['errors']
Но като гледам и в други файлове имаш подобни, които не ползваш в normal_layout.php :).

от georgi.s.yankov (6219 точки)



0

Ето и моето решение: ЗЪК

Демо


от lisi4ok (40 точки)


0
Препоръчвам ти да си качиш source кода в GitHub. При опит да отворя Демото ми изписва следната грешка:
string(15) "C:\web\www\Iri\" string(35) "C:\web\www\application\controllers\" string(50) "C:\web\www\application\controllers\administration\" string(30) "C:\web\www\application\models\"

от Anastasoff (465 точки)

0
@lisi4ok - Любопитно ми е защо си именувал папката "layouts" предвид файловете, които тя съдържа?
EDIT: И още да попитам защо в този ред си именувал променливата с долна черта отпред? $_file = realpath($configuration['module']['path'] . $page . '.php');

от georgi.s.yankov (6219 точки)



0
Здравейте, имам странен проблем, който (засега) не мога да реша:
Викам изгледите с функция „render($authors,'Нова книга','ls_add_book')", която е функцията от сорса, без изменение. Вторият параметър е името на страницата, което трябва да се изпише в таба на браузера и като заглавие на изгледа. Всеки изглед като първи ред вика header.php:


Във всички изгледи това работи, с изключение на изгледа „Нова книга“, при който заглавието се изписва, но се появява и съобщение:
„Notice: Undefined variable: title in /var/www/books/inc/header.php on line 8“
Това съобщение се визуализира и в таба на браузера.
Името на променливата не е в конфликт - смяната с $abadaba води до същия резултат на същата страница.
Някаква идея?

от angie_bg (214 точки)


0
Ако премахна 8-и ред (

), съобщението започва да се появява за 5-и ред, само за тази страница.

от angie_bg (214 точки)

0
Това става защото променливата $title най-вероятно няма стойност(празна е). Задай и някаква стойност например:

от lyubo24 (249 точки)



0

Github / Demo

Приблизително лесно, като се има в предвид, че си карам на MVC шаблон още от преди 2-3 домашни :D Просто карам варам винаги така го докарвам.
 
Т.нар. тука Single entry point или още познат и като Bootstrap или па Router - са.. спорно е за всичките, но човек схваща като се каже някое от тях.
 
Та взех го от Адаша Колега Янков, макар че и да не бях погледнал темата вероятно щеше да е същото. То няма какво да е като няма да използваме htaccess.
 
Не знам, казвайте. Обърнах си го на mvc пак, ама определено ми харесва повече от предното с FileUpload-а което правих. Toва стана някак по-интуитивно според мен.
 
И каква е схемата: идва в index.php, след което минава през runPage();, която функция проверява какъв е REQUEST_METHOD-а инициализира нови два вътрешно масиви за $_GET и $_POST,
след което прави проверка дали съществува такъв model/controller и после ги извиква. Логиката е следната. Require-ва първо модела после controller-a, като в модела се взима от бази данни,
проверява се т.нар. "create" , демек добавянето на данни, след което се отбива през контролера да запише някой неща в $tempalteData и да извика съответното view със същото име.

от lekanosht (21 точки)


0
1. Във functions.php и там на ред 17 защо проверяваш isset($method), предвид това, че ти вече си проверил is_array($method) ?
2. В index.php защо ползваш това unset($_GET['page']); ?

от georgi.s.yankov (6219 точки)

0
1. Хъм.. :D Хубав въпрос, да. Не съм обърнал внимание. Иначе да, няма логика. 2. Защото не ми е нужно по кода и да не се бърка из големия масив $templateData. Са, за по-advanced може да влезне в употреба по някакъв начин, ама все пак.
Иначе доста по-интуитивно ми се струва от колкото FileUpload-Manager, дет и той е в repo-тата ми. Ще кача и демо в горния пост, че тия т.нар. reply нямат bbcodes.
Много почва да ме дразни и форума и системата, честно ви казвам :D Системата на сайта си прави каквото си иска, когато си иска; тая Q&A система я ненавиждам, че ми е разхвърляна и нелогична на максимум... Ужас. :D

от lekanosht (21 точки)


0

Здравейте, моля дайте мнение и за моето домашно, за да знам дали правилно съм разбрал нещата.
Домашното работи с базата данни за книгите от последните няколко домашни.


от bakalov85 (604 точки)