Предмиствата на CakePHP или защо се влюбих в него

12 октомври 2009

cakephp

В последните три дена си играх и направих един клиентски проект на CakePHP. Останах с адски добри впечатления от framework-a. Всъщност има много повече предимства от колкото ще ви се стори на пръв поглед. Недостатъци почти не се намират, особено ако имате опит с други frameworks ще е убедите, че е доста по-добре замислен и реализиран от останалите. Ето и моето ревю на CakePHP Framework.

Документацията

Много е слаба наистина. Дори и на пръв поглед да ви се стори много добра, всъщност основни примери и разяснения липсват. Добрата новина е, че всичко, което ви трябва може да бъде открито в Google, защото обществото на CakePHP е доста будно. Естествено цялата нужда информация я няма синтезирана на едно място и е малко неудобно, но какво пък, не е болка за умиране. Естествено това би отказало хората, които не им се занимава чак толкова. Имено заради това CodeIgniter печели ежедневно много потребители, защото документацията е перфектна и за да започнете ви трябва много малко. Но способностите на CI са далеч под тези на CakePHP.

ORM и валидация

Повече от перфектни са и двете. Основната разлика при това с CodeIgniter, е че валидацията се налага в модела и няма нужда да я пишете всеки път. Което е бомба. Има доста „вградени” методи по които можете да валидирате, които включват дали записът е уникален, дали е валиден e-mail и така нататък. Доста по-идейно решение от колкото валидацията да се пише многократно.

Интернациоализация

Всичко става посредством функцията __(). Лесно бързо и точно. Благодарение на конзолата генерирате .po файлове, които лесно и удобно може да редактирате, а и да добавяте нови записи в тях, да речем с PoEdit. Решението е по-лошо от това вариантите, които Zend предоставя, но с пъти по-добро от масивите на CodeIgniter и Kohana. Тук обаче, ще трябва да се потрудите и да си напишете малко разширение за урли от типа на /bg /en /ru. В Интернет срещнах две подобни решения, които не ми свършиха работа, но пък ми дадоха ясна насока. Не би трябвало да ви отнеме много време за това.

Липсата на основни хелпъри и библиотеки с които съм свикнал в CodeIgniter

Например за манипулация на снимки, за качване на файлове. Малко е неудобно в това отношение и ще трябва сами да си търсите решения. В „пекарната” има доста решения и трябва да прецените кое е за вас. Но все пак това са неща, които се пишат еднократно и се ползват както се казва цял живот, не оказват голяма влияние като цяло.

Лейаутите са точно това, което реализирах ръчно на CodeIgniter

Така си е. Добавяте си основен лейаут, който да използвате и по всяко време за всяка страница може да го смените като зададете стойност на променливата layout. Simple as fuck. Конвенцията за папките е повече от прилична и е нещо с което аз лично съм свикнал да си правя за всички проекти, без значение дали е плейн пхп или на някой framework.

Конзолата

Конзолата е ваш стопроцентов приятел. Не я пренебрегвайте. Работи както под linux така и под windows (поне аз пробвах xp, vista, windows 7) без никакви проблеми. Генерира CRUD операции, които ви спестяват досадно писане на един и същи код отново и отново. Темплейтите, които генератора използва са лесни за редактация и спокойно, бързо и лесно може да ги вградите в лейаута на вашата система за управление на съдържание. Също така конзолата ви генерира и .po файловете като претърсва всички ваши файлове за да разбере къде какво сте използвали, което е супер удобно.

Обем на кода

Със сигурност пишете по-бързо и доста по-малко код от който и да е друг framework, който съм използвал. Направо си е песен. Всичко изглежда чисто, подредено и доста приятно, когато се наложи да редактирате нещо набързо.

Automagic и кеширане

Това всъщност е основното нещо, с което CakePHP е известен. Голямата магия, която се случва там, ако мога така да го нарека. Кейка е достатъчно умен за да знае какво точно правите и как да ви помогне. Знам как звучи :) Но това определено е голям бонус. Cake знае кога редактирате, кога добавяте, кога триете, знае как се казват полетата на базата ви данни и какво да прави с тях, знае как да визуализира релейшъншипите, знае и още неща…
От кеширането останах много доволен. Не изискваше почти нищо от мен освен да барна конфигурационните файлове и воала, всичко работеше перфектно. Какво повече му трябва на човек?

Архитектура на фреймуорка, рутери, сегменти

Основното преимущество пред CodeIgniter и другите, е че всички ваши контролери наследяват AppController-а, моделите AppModel-а. Не че не може да реализирате подобна архитектура и в другите frameworks, но в крайна сметка ако имате време и желание може и най-неудобния framework да превърнете в принцеса :) . AppController-а и AppModel-а вървят… празни. Вътре може да описвате функционалност, която да използвате във всички контролери и модели. Много удобно и приятно. Така си спестявате повторното писане на код в много случаи и си държите контролерите приятни за окото.

Другото много удобно нещо е сегментите. В CI те се вземат с $this->uri->segment(номер-на-сегмента), което не винаги върши работа. Да речем искате да проверите дали някой от сегментите отговаря на думата admin… В CakePHP това може да го реализирате с !empty($this->params[‘admin’]. :) Освен това може и да му извлечете стойността. С пъти по-добре измислено.

Да речем също ми се нрави факта, че всички публични файлове (css, js и т.н.) ви се намират в app/webroot/. Но на съръвра се визуализират като /css /js. Това прави нещата доста по-организирани и подредени.
Спокойно може да си направите рутинг префикс за административния панел. Да кажем по подразбиране е admin. Така например в контролера PagesController функцията едит ще я кръстите admin_edit и ще се визуализира като /admin/edit. Симпатично е. Убива нуждата да правите различни контролери за административния панел, които да се дубликират по име и от части функционалност, както например в CodeIgniter или Kohana се налага да ги слагате в определена папка.

Рутера работи и със сигурност ще се оправите много лесно с рутингите. Нещата са обяснение много добре дори и в документацията. Също така поддържа и регулар експрешъни, което го прави незаменим приятел на seo оптимизатора :)

Финални мисли

Като заключения мога да кажа, че по-удобен framework не съм срещал. Чувството да пишете PHP се променя съвсем, някак си става като песен :) . Това, обаче, което си струва да направите е да речем да си пренапишете някой от хелпърите на CodeIgniter, които са доста полезни в много отношения. За всички, които не са се занимавали с какъвто и да е било PHP Framework мога да кажа да не се хвърлят веднага на CakePHP. Минете първо през по-добрата документация на CodeIgniter за да свикнете на MVC патърна и на основните идеи и чак след това започнете с кейк. Определено ще ви бъде от по-голяма полза. А за всички, които поради някаква причина са решили да не опитат CakePHP мога да кажа – губите, при това губите много :)

p.s. Тук ще събирам всички полезни връзки, които открия за CakePHP

Надявам се списъка да стане още по-сериозен с времето, за което ще се надявам и всеки, който има желание да даде своите полезни връзки в коментарите, за да ги добавя :)

13 октомври 2009

Айде аз на всяка манджа мерудия. Всъщност 10x за линковете в блога ми, въпреки, че единия е доста стар, и принципно с един jQuery Date контрол е излишен аз все още го ползвам.

Така по темата, за липсата на хелпъри съм съгласен. Аз принципно явно съм се написал на хелпери, компоненти и бихейвиъри (бахти странното звучи на Български), но всичко си пиша сам. То и на мене винаги ми трябват някакви супер къстом неща. Но ето тука има доста коде снипети http://cakeforge.org/ аз в началото го позвах, когато нямаше вградена аутентикация. Може би ще е полезна връзка. Лошото е че е на доброволни начала и някои проекти даже не са почвани, а други морално остарели.

За js и css – ако си строг спаратист между чужди и свои библиотеки (хаха как звучи) външните библиотеки и стилове може да ги сложиш в /app/vendors/js и /app/vendors/css, докато твоите е /app/webroot js и css. Въпреки това разделение и двете папки от вън се виждат като /js и /css ;) Не ме питай от къде го знам :) Имам един пост за autoload на JS и CSS – http://nik.chankov.net/2008/12/20/autoload-your-javascript-and-css-in-cakephp/. Аз лично си го ползвам – добавяш файл в тези папки и той се лоудва автоматично – полезно е ;)

Аз лично се дразня малко на префиксите (в частност за админ говиря), защото така трябва да пишеш 2 пъти един и същи код за add/edit, което според мене е тъпо въпреки, че от друга страна е логично, но щом е така по конвенция – съобразявам се :)

Ами пак мерси за пинг-а :)


• • •
13 октомври 2009

Като цяло липсата на хелпърите за мен е нещо странно, но както вече споменах, не е чак такава болка за умиране, особено като се има на предвид многото плюсове на framework-а. Наистина има много готови неща, но поне при мен се оказа, че имат прекалено много функционалност или че не работят по начина по който на мен ми трябва. Затова набързо си написах основните неща. За сметка на хелпърите обаче, вендорите са си голяма компенсация. Още не съм пробвал да вграждам Зенд библиотеки, но и това ще стане съвсем скоро :)

Благодаря за информацията за разделението. Изглежда ми много идейно.

Аутоладъра, който си написал е много симпатичен, не знам как не ми е хрумвало подобно нещо :) ) Със сигурност ще го използвам още в следващия проект!

За линковете няма за какво да ми благодариш. Информацията, която намерих там ми беше изключително полезна!


• • •
13 декември 2009

А някой случай да знае дали cake го има преведен на Български.
Аз доста се запалих по него и сега го разучавам. Ето едно страхотно допълнение към cakephp = http://www.bedita.com. Аз съм започнал да го превеждам лека полека, но не знам кога ще приключа. Когато и да стане това ще пусна един линк тук. :)


• • •
13 декември 2009

Ето една доста полезна връзка с четири полезни видео урока:
http://www.davidgolding.net/screencasts


• • •
25 февруари 2010

Избрах Кейк, защото според девелопърите има по-кратък „learning curve“ в сравнение с останалите фреймове, а това за мен е от най-голямо значение. В началото имах колебания именно между CI и Cake, но особено след поста ти вече нищо не може да ме върне назад.

Успех на всички Кейкъри (, за да не кажа фурнаджий) :)


• • •
26 февруари 2010

На времето и аз имах колебания и се чудих от къде да започна, за това минах през всичко, преди да стигна до Cake. И други мои познати направиха подобни врътки, но на стажантите ми препоръчвам да започнат с нещо още по-леко като CI или Limonade. Но това при положение, че не са на ти с MVC и идеите, които се влагат в един фреймуърк. Но все пак, зависи от нуждите… :) ) А ако искаш да си поиграеш с 5.3 и да се възползваш от цялата мощ на езика, с удоволствие бих предложил < а href="http://lithify.me/">Lithium, на Nate, което е форк на Cake-а и е повече от обещаващо, по мое му :)


• • •
26 февруари 2010

Сега като стана въпрос за MVC, се сещам за ето този пост на teknoid http://teknoid.wordpress.com/2009/01/06/another-way-to-think-about-mvc/ (сори, но не знам дали е разрешен html), който по много илюстративен и забавен начин обяснява какво аджеба е MVC и успява да демонстрира, че това всъщност не е кой знае какво :P

Поздрави,
Тони


• • •
krasi
10 март 2010

Къде мога да намеря нещо повече Cake PHP с Framework на български, че една дипломна работа ме чака за чудо и приказ


• • •

Имаш мнение? Сподели го: