08-03-2009, 18:12
|
|
|
|
חבר מתאריך: 02.10.05
הודעות: 2,355
|
|
ציטוט:
זאת אומרת שנניח שמספיק שיש לי מחלקה שמתעסקת עם כל ה-output, מחלקה שמתעסקת עם ה-modules, וקובץ index.php שמחליט מה יתבצע (ה-controller) - אז כבר למעשה, בצורה הזאת, אני מממש MVC?
|
כן, מימשת MVC, ואפשר להגיד שבנית לעצמך Framework...
אתה יכול פשוט לא לעשות את זה..
אבל קריאה של כל הריפרנס של CakePHP נתן לי המון רעיונות מאוד טובים ל- Framework הבא שאני (אולי) יכתוב. (symfony לא מתועד באותה צורה ידידותית כמו CakePHP, וחבל)
הרעיון של ה- CRUD הוא רעיון מאוד טוב שאני יכניס ל- Framework הבא (אני רק צריך לקרוא על PUT ו- DELETE ואיך זה מיושם ב- PHP)
הרעיון הוא שלכל פעולה יש מתודה.
Create (מיושם ב- SQL כ- INSERT) משתמש במתודה POST
Read (מיושם ב- SQL כ- SELECT) משתמש במתודה GET
Update (מיושם ב- SQL כ- UPDATE) משתמש במתודה PUT
Destroy (מיושם ב- SQL כ- DELETE) משתמש במתודה DELETE
בנוסף, כל Model זה מחלקה, שה- Controller קורא לפונקציות מתוכה, לפי הקלט שמגיע מהכתובת)
לכל מתודה כזאת יש שם שמור, ככה, ללא כל קונפיגורציה, המערכת אוטומתית יודעת מה לעשות.
זה בעצם הרעיון (אני שוקל את המבנה הזה ל- Framework הבא שלי, אמנם לא המצאתי משהו חדש אבל תגובות לשיפור יהיה נחמד, עשיתי שינוי קטן עם הצגת דף משתמש, נראה לי יותר מתאים והגיוני)
קוד PHP:
class User { function User() { // Get MySQL Resource by implementing the singleton design pattern // Configure MySQL Resource (Exemple: enter table name, table field and the datatype of the field } function _index() { // URL: address/user // Called by GET method, implementing Read }
function show($id) { // URL: address/user/show/1 // Called by GET method, implementing Read }
function add() { // URL: address/user/add // Called by GET method, implementing Read }
function _create() { // URL: address/user // Called by POST method, implementing Create
// Another code here
// if Create OK $this->_index(); // Return to userlist }
function update($id) { // URL: address/user/update/1 // Called by GET method, implementing Read }
function _update($id) { // URL: address/user/1 // Called by PUT method, implementing Create
// Another code here
// if Update OK $this->_index(); // Return to userlist }
function _destroy($id) { // URL: address/user/1 // Called by DELETE method, implementing Create
// Another code here
// if Update OK $this->_index(); // Return to userlist } }
ה- Framework יודע איך לטפל במחלקה הזאת, בלי להגיד לו כלום.
המבנה של ה- url הוא כזה:
קוד PHP:
address/[<className>]/[<classFunction]/[<classArg1, 2..1,000]
כל מה שבתוך [] הוא לא חובה.. יוצא ששום פרמטר הוא חובה.
אם אין className, אז הוא יציג את דף הבית (מחלקה בשם index?..)
כשאין classFunction הוא קורא לפונקציה index_, אם קיימת (אם אז מוציא הודעת שגיאה)
-classArg זה מן הסתם ארגומנטים לפונקציה.
כשיש בקשת POST ה- framework קורא ל- create_
כשיש בקשת PUT, הוא קורא ל- update_
כשיש בקשת DELETE הוא קורא ל- destroy_
GET משמש לקריאה לפונקציות (מסתדר לי יותר טוב בראש וגם זה קל יותר לביצוע)
_____________________________________
|