נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

הפרדת לוגיקה מתצוגה ב-PHP

מחבר:
בתאריך:

PHP היא שפה שקל יחסית ללמוד וליישם, אבל גם שפה שהשימוש בה עלול להידרדר בקלות לכתיבת "קוד ספגטי", שבו שרויים בערבוביה חלקי קוד מסוגים שונים: HTML, CSS, JS כולם ביחד, ללא תכנון וסדר, לתוך ה-PHP. למה זה רע? מפני שהרבה יותר קשה לתחזק קוד מסובך מדי שלא לצורך, ובכלל כך, הרבה יותר קשה לשנות את הקוד או לטפל בבאגים.

כדי למנוע את התדרדרות הקוד למצב של "קוד ספגטי", נשתמש בעיקרון המנחה שהחלקים השונים של האפליקציה יישבו בקבצים או בתיקיות נפרדים. ההפרדה של קבצי ה-JS וה-CSS משאר הקבצים ברורה, אבל כיצד נוכל למנוע את הערבוב בין לוגיקה שהאחראי לה הוא ה-PHP, ובין התבנית שנוצרת על ידי ה-HTML? הרעיון הפשוט ביותר הוא שאת החלק הלוגי, שמייצר את המשתנים ואת ערכי המשתנים, שמים בקובץ PHP אחד, שמכונה קובץ פקד (controller), ואת החלק שבו משובצים המשתנים בתוך ה-HTML שמים בקובץ PHP שני, שמכונה קובץ תבנית (template).

בדוגמה הבאה, הקובץ index.php משמש כקובץ פקד, שעשוי לקלוט נתונים ממסד נתונים או שירות אחר כלשהו, מעבד את המידע, ומספק משתנים שאותם נשבץ לתוך ה-HTML בקובץ התבנית, index_tmplt.php.

זה הקובץ index.php שאחראי ללוגיקה:

<?php
$men = array(
 "Efraim"=>array("name"=>"אפרים","age"=>27),
 "Sivan"=>array("name"=>"סיון","age"=>25)
);
?>

בקובץ index_tmplt.php נשבץ את המשתנים בתוך תבנית ה-HTML, ולשם כך נכלול בתוכו את הקובץ index.php באמצעות include :

<?php
include "index.php";
?>

<!doctype html>
<html>
<head>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<p>
שני היזמים המצליחים של התקופה האחרונה
<?=$men["Efraim"]["name"]?>, <?=$men["Efraim"]["age"]?> ו
<?=$men["Sivan"]["name"]?>, <?=$men["Sivan"]["age"]?>
פצחו במיזם חדש ומעניין. </p>
</body>
</html>

והתוצאה:

שני היזמים המצליחים של התקופה האחרונה אפרים, 27 ו סיון, 25 פצחו במיזם חדש ומעניין.

מהדוגמה הזו אפשר גם להבין מדוע ההפרדה בין לוגיקה ותצוגה עשויה לייעל את העבודה בצוות הודות לכך שאנשים שונים בצוות יכולים לטפל בחלקים השונים של הקוד - המתכנתים בצד הלוגי והמעצבים בצד התבנית בלי שיפריעו אחד לשני.

 

ההקשר הרחב –MVC האסטרטגיה התכנותית שעומדת מאחורי עקרון ההפרדה

המדריך הנוכחי נועד להיות מדריך בסיסי, ואם מה שתיקחו ממנו זה רק את העיקרון שחשוב להפריד בין לוגיקה ובין קבצי תבנית, הרי שהצלחתי במשימתי. בכל זאת, חשוב לי לנסות ולהסביר את ההקשר הרחב יותר בגלל שהוא מאוד חשוב להבנת הדרך לתכנות מושכל ב- PHP.

 

הצלע השלישית - המודל

מקור הנתונים שיציג האתר יכול להיות במסד נתונים או בשירות שמספק את הנתונים באמצעות פרוטוקולים דוגמת JSON או XML, ולקוד שמטפל במקור הנתונים נוהגים לקרוא מודל (model). תפקידו של המודל לשלוף את המידע ממסד הנתונים, או לחלופין לשמור, לעדכן או למחוק את המידע ממסד הנתונים, תוך שמירה על אבטחת המידע. בזה מקור הנתונים או המודל הופך לצלע השלישית, שמצטרפת לשתי הצלעות האחרות, שכבת התצוגה (view) ושכבת הבקר (controller). בארכיטקטורה הזו, תפקידו של הבקר הוא לתווך בין שכבת התצוגה ושכבת המודל.

הפרדת קוד האתר לשלושה מרכיבים: תצוגה (view), בקר (controller) ומודל (model) נחשבת אסטרטגיה מקובלת, שנהוג לפעול לפיה כשמתכננים אתר או אפליקציה כהלכה. אסטרטגיות כאלו, שמתכנתים נוהגים להשתמש בהם לתכנון התוכניות שהם כותבים, זכו לכינוי תבנית עיצוב (design pattern), וקיימות כמה עשרות תבניות עיצוב. בין תבניות העיצוב, החשובה ביותר למתכנתי PHP היא תבנית MVC, ראשי תיבות של Model-View-Controller.

 

כיוון זרימת המידע

קל יותר להבין את הרעיון של MVC אם מבינים את כיווני זרימת המידע. הכיוון הראשון הוא מהתצוגה אל המודל דרך הבקר. והכיוון ההפוך, הוא מהמודל אל הבקר ומשם אל התצוגה. חשוב לזכור שבאמצע, בין המודל ובין התצוגה, תמיד תמצא שכבת הבקר, שמקשרת בין שתי השכבות, ומפעילה לוגיקה לסינון הנתונים, ולניתובם.

לדוגמה, טופס הרשמה בנוי מ-HTML, ושייך, בהתאם, לשכבת התצוגה. אחרי שהמשתמש מזין את פרטיו לטופס, הפרטים עוברים סינון ובקרה בשכבת הבקר, שמחליט לאיזה מודל להעביר את הטיפול בנתונים (המודל בדרך כלל מורכב ממספר קלאסים), והמודל עצמו בודק את הנתונים ומחליט אם לאחסן, לעדכן או לדווח על תקלה (דוגמת רישום כפול). המידע שחוזר מהמודל עובר דרך הבקר, שיכול להחליט להפנות את המשתמש לדף אחר (במקרה של הצלחת הרישום), או לחזור לדף המקורי, ולהציג הודעת שגיאה, במקרה של תקלה.

התרשים הבא מציג את שני כווני זרימת המידע במודל ה-mvc:

mvc design pattern

לכל מדריכי ה-PHP

 

 

הוסף תגובה חדשה

 

= 9 + 8