סיכום מתומצת בעברית CakePHP – חלק 1

מבנה תיקיות:
בתיקיה הראשית יש 3 תיקיות:
app – התיקיה בה אתה יוצר את האפליקציות
lib – תיקית המנוע, בה אסור לגעת
vendors – תיקיה לספריות חיצוניות שבהן משתמשים.
בנוסף התיקיה מכילה קובץ Index.php וגם קובץ htaccess.

מבנה תיקית app :

תיקית app מכילה מספר תיקיות :
config – קבצי הגדרות, קישור לדאטאבייס, bootstarp וכדומה.
console – פקודות ל-Console. וניתן להכיל בתוך התיקיה הזו גם Templates.
תיקיות Controller / Model / View – אין מה לפרט, לפי מודל ה-MVC.
Lib – עוד תיקית לסריות חיצוניות, למה יש גם כאן וגם בתיקית האם ? כדי להפריד ספריות של ספקים חיצונים שיאוחסנו בתוך vendors בתיקית האם, ולעומת זאת ספריות שאתה כותב, יאוחסנו כאן.
locale – קבצי תרגום לשפות שונות.
plugin … ברור.
test – מכילה את כל ה-test cases, פירוט בהמשך.
tmp – לוגים, לפעמים שמירה של Sessions ועוד. התיקיה חייבת להיות קיימת, ועם הרשאות כתיבה.
Vendor – ספריות של ספקים חיצוניים . ברגע ששמים אותם כאן, אפשר לקרוא לפונקציות שלהם בצורה הרגילה
כלומר App::import('vendor','name'); הסיבה לכפילות עם תיקיה דומה בתיקית האם תוסבר בהמשך.

webroot – בסביבת יצור, זו תיקית האם, ובתוכה יהיו גם קבצי CSS, JS, תמונות וכדומה.

מקור : http://book.cakephp.org/2.0/en/getting-started/cakephp-folder-structure.html

מוסכמות במתן שמות ב- CakePhp

מוסכמות של מתן שמות, הן עניין גדול ב-CakePhp שאם שומרים עליו מסייע רבות לכל אורך הדרך.

מוסכמות שמות עבור Controller

– נכתבים בלשון רבים
– מסתיימים במילה Controller
למשל : PeopleController and LatestArticlesController

המתודה הראשונה של קונטרלר היא תמיד index() .
ולכן כאשר מבצעים request לקונטרולר, זו המתודה שמוחזרת כברירת מחדל.
למשל הכתובת http://www.example.com/apples/ מחזירה את המתודה index() של אוביקט ApplesController.
כאשר ה-View של אותו אוביקט יהיה בכתובת http://www.example.com/apples/view/
ויקרא למתודה view() של אוביקט ApplesController.

ישנה גם שיטה לשלוט על הנראות למתודות מסויימות. נניח שאנחנו כותבים מתודה לשימוש פרטי שלנו כמנהלי מערכת. אז פשוט מתחילים את המתודה עם מקף תחתון.
דוגמא :

class NewsController extends AppController {

    public function latest() {
        $this->_findNewArticles();
    }

    protected function _findNewArticles() {
        // Logic to find latest news articles
    }
}

אז הגישה למתודה תהיה דרך http://www.example.com/news/latest/ אבל מי שיקליד http://www.example.com/news/_findNewArticles/ יגיע לדף שגיאה.

מבנה URL לפי המוסכמות של קונטרולרים

כל עוד הקונטרולר כתוב לפי המוסכמות, אז מספיקה מילת השם שלו, בלשון רבים, באותיות קטנות בתור URL.
למשל, קונטרולר בשם ApplesController – ניגש אליו באמצעות הכתובת http://example.com/apples.

לגבי ביטויים שמורכבים ממספר מילים, אפשר להשתמש בכל הצורות של החיבור (עם /בלי מקף תחתון בין המילים, וכאשר כל מילה מתחילה באות גדולה או קטנה). אבל יחד עם זאת, ה-URL תמיד יהיה אותיות קטנות, עם מקף תחתון.
למשל אם יש לנו מתודה RedApplesController::go_pick , אז ה-URL שלה יהיה /red_apples/go_pick

מוסכמות לשמות קבצים ושמות Class

שמות קבצים ושמות קלאסים תמיד CamelCased כלומר כל מילה מתחילה באות גדולה. שם הקובץ יהיה אותו דבר בדיוק עם נקודה והסיומת php.

לדוגמא :
הקלאס יקרא MyNiftyClass
אז הקובץ יקרא MyNiftyClass.php

עוד דוגמא לקלאס EspeciallyFunkableBehavior , אז שם הקובץ יהיה EspeciallyFunkableBehavior.php .

אם יש לי קונטרולר אז הוא יקרא KissesAndHugsController
ושם הקובץ יקרא MyHandyComponent.php

אם יש לי מודל שנקרא OptionValue
אז שם הקובץ יהיה OptionValue.php

כל קובץ כמובן בתיקיה שבה הוא צריך להיות.

מוסכמות לגבי שמות מודל ושמות של רכיבים בדאטאבייס

שמות של קלאסים במודל, הם תמיד CamelCased, בלשון יחיד. למשל Person, BigPerson, and ReallyBigPerson.

שמות של טבלאות שתואמות למודלים הן תמיד בלשון רבים, והמילים מופרדות בקו תחתון. למשל people, big_people, and really_big_people.

יש בקישור הזה הסבר על היכולות של יחיד/רבים ב-CakePHP.

שמות שדות שמורכבות מכמה מילים, מופרדות בקו תחתון. my_field

שמות של מפתחות זרים מורכבים משם הטבלה המקורית עם סיומת _id למשל., אם לאופה אחד יש הרבה עוגות, אז המפתח הזר שמתייחס לטבלה bakers יקרא בשם baker_id (מה שמסביר שוב פעם למה שמות הטבלאות הן בלשון רבים).

אם יש טבלאות שעושים להם join בקשר hasAndBelongsToMany , אז קוראים להם בשם טבלאות המודל שהם מצרפות יחד , בסדר אלפביתי, נניח אני עושה join לטבלאות apples וגם zebras אז המודל יקרא apples_zebras כי a הוא לפני z.

כל טבלה ב-CakePHP חייבת מפתח ראשי יחיד, הפריימוורק לא מטפל במפתחות ראשיים מורכבים (כלומר מכמה שדות יחד).
כלומר אם יש לך טבלה שאתה רוצה להשתמש בה עם הפריימוורק אתה חייב שיהיה לה מפתח ראשי יחיד.
(אפשר לעשות שאילתות לעדכון מפתחות מורכבים באמצעות הפונקציה query).

המפתח הראשי יכול להיות מספר רץ (auto-increment ) או char(36) ואז יש מתודה שנקראת String::uuid שנותנת לו מפתח.

מוסכמות לגבי View

שמות של הקבצים שמכילים את ה – view, הם תמיד מורכבים משמות הפונקציות של הקונטרולר שאותו הן מציגות , אבל עם קו תחתון.
למשל הפונקציה getReady() ששייכת לקונטרולר PeopleControler , תחפש את ה-View שלה כאן /app/View/People/get_ready.ctp

דוגמא אחרונה, שמסכמת הכל ומציגה שאפשר להשתמש גם בלשון רבים שמובנה בתוך המילה, ולאו דווקא עם S בסוף :
Database table: “people”
Model class: “Person”, found at /app/Model/Person.php
Controller class: “PeopleController”, found at /app/Controller/PeopleController.php
View template, found at /app/View/People/index.ctp

המבנה הוא תמיד /app/View/Controller/underscored_function_name.ctp

מקור : http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *