Някои разяснения относно проекта по Web Development Basics.
Здравейте.
Тези дни захванах проекта по WDB. Първо, поздравления за заданието - изглежда интересно и провокира към задълбаване в практическия процес на изграждане на реално-работещ апликейшън. Изникнаха обаче някои въпроси, които отнасям към всеки, който може да помогне, но най-вече към автора/авторите.
Ще се постарая да съм кратък:
1. Към момента имам работещ рутинг енджин с възможност за дефиниране на къстъм рутове, опционални параметри, регекси и други гъзарийки. Искам да потвърдите, обаче, дали правилно разбирам точка 1 от задължителните функционалности - Default routing system. От нас се иска проложението да работи по подразбиране по схемата controller/action/parameter_1/parameter_2? Ако (по някакъв начин при стартирането на апп-а) юзъра (developer-а) избере къстъм рутове - дефолтния рутинг механизъм да се изключи? Предполагам това е идеята, но ще бъда благодарен, ако потвърдите.
2. Areas. Прочетох едно-две неща, но отново ми е малко абстрактно. Доколкото разбирам се изисква да се даде възмоност да се дефинират групи рутове. Не съм използвал такова нещо в ASP, а доколкото видях там има такова понятие, затова ще помоля за кратко разяснение. Правя аналогия с групирането на рутове в Laravel, което съм използвал, но може и да се бъркам.
3. Strongly typed views. Отново нещо от света на ASP, доколкото успях да се информирам. И пак моля за два-три реда идеи какво представлява това чудо...
И едно последно питане - не видях да е забранено използването на библиотеки от packagist/composer. Предполагам е пропуск в условието, но все пак...
Това е засега,
мерси! :)
Благодаря за обширните разяснения!
В тази връзка имам допълнителни питания:
1. В моя случай съм дефинирал container.php, което играе ролята на някакъв кофиг файл, в който дев-а може да си подготви някакви депендънсита. Да кажем, в този файл имам следното:
Отдолу работи така: prepare приема типа обект, който искаме да инжектираме (където и да е), на кой интерфейс отговаря, кой е самия обект и какви депендънсита има.
Мисълта ми е - нямам xml-и, json-и, а просто php файл - много по-удобно ми е, пък и смятам, че е по-приятно за ползване. Ок ли е?
2. Доколко сме задължени да използваме анотации в докблока (изключвам задължителната част с раутването чрез анотации). Аз лично предпочитам да си дефинирам пропъртита и да ги обработвам с рефлекшън. Давам пример с моя IoC:
В моя случай базовия контролер си извиква депендънси (configProviderContract) през пропърти, което се чете отзад с рефлекшън. В последствие мога да извиквам стойности от конфигурационния файл (използвайки инджектнатото депендънси) така:
Може би защото не съм фен на анотациите, предпочитам да не ги използвам наляво надясно. Повече ми харесва подхода с рефлекшън на пропъртита. Ок ли е?
Засега е това, но в процеса на работа може да се наложи отново да вдигна темата с някой друг въпрос. :)
CSRF Token-a аналогично на Form Helper-a се очаква да го направим - т.е. класа държи правенето на тоукъна и неговата валидация?
примерно Token::init()->setToken(); - което си прави филда и дава стойност, и после някъде в контролера за въпросната заявка:
Token::init()->validate($token);
Или трябва да е нещо по-различно?
Супер е. И според мен конфигурация с РНР е по-добре от конфигурация с json, xml, yaml, etc..Като цяло няма ограничение как точно ще го направите. Ако имаше стриктни ограничения всички фреймуърци щяха да са еднакви :) Дал съм такива примери, тъ йкато са най-близки до фреймуъците, с които евентуално повечето имат досег - ASP.NET/Spring.
Лично аз иначе не бих ползвал несъществуващи полета, които да създавам през __set/__get, заради факта че трудно би се усетил човек от къде идват, а и трябва да ги пише ръчно - няма дописване. Затова бих ги дефинирал като полета. Анотацията @var в случая за фреймуърка няма значение, той чете конфигурацията. Тази анотация е безобидна и предоставя само метаинформация на IDE-то (PHPStorm, Eclipse, Netbeans...), да дава интелисенс за от този обект нататък. А дори и да го направя така, бих ползвал анотацията @property в класа, която отново ще даде информация на ИДЕ-то какви пропъртита да очаква да бъдат създадени on the fly. Разбира се, не си длъже да го направиш така :)