MasterScripter

המדריך השלם ל – Composer

תוכן עניינים

Composer הוא הכלי הפופולרי ביותר לניהול תלויות (Dependency management) בפרוייקט שמפותח בשפת PHP; הכלי מופעל במסוף (CLI).
השימוש בו רווח מאד – סביבות עבודה כמו Laravel, Slim, Zend Framework, Symphony ועוד רבות וטובות מתבססות עליו ואי אפשר להאשים אותן – נכון להים ניתן למצוא קרוב ל – 137,000 חבילות במאגר!

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

בקיצור – אם עוד לא התחלתם, זה הזמן המושלם להתקדם ל – Composer! נצא לדרך?

דרישות מערכת

Composer רץ על PHP ולכן הדרישה המינימלית ביותר היא גרסה PHP 5.3.2 ומעלה.
הכלי רץ באופן זהה על Windows, לינוקס ו – OSX.

במקרים מסויימים, ייתכן שתידרשו להתקין מערכות ניהול גרסאות (Git, Svn וכו') כדי להתקין חבילה, בהתאם לדרך שבה ניהול הגרסאות של החבילה נעשה.

דרישות מכם

אף-על-פי ש – Composer רץ על PHP 5.3.2 ומעלה, המדריך נכתב ל – PHP 7.
בנוסף, עליכם להכיר:

איך להתקין Composer ב – Windows

שלב א' – PHP במסוף

אם כבר התקנתם PHP במסוף, אתם יכולים לדלג לשלב הבא.
לא יודעים אם התקנתם? היכנסו למסוף (Command Prompt) והריצו את הפקודה הבאה:

php -v

אם גרסת ה – PHP שמותקנת הודפסה, מזל טוב! אתם יכולים לדלג על שלב א' ולעבור היישר לשלב ב'.
קיבלתם הודעת שגיאה? אל ייאוש! המשיכו לביצוע שלב א' ולפני שתשימו לב, גם אתם תוכלו להריץ PHP במסוף.
חשוב לי להתעכב על השלב הזה אף-על-פי שהוא לא חובה בשביל להתקין Composer, כי הרצת PHP במסוף היא דרך מהירה ונכונה לבצע בדיקות והרצות של סקריפטים,
ואין סיבה שלא תהפכו את האפשרות הזו לזמינה עבורכם. ההתקנה ממש פשוטה – בואו נעשה את זה 🙂

קודם כל, עלינו לאתר את התיקייה שבה PHP מותקנת.
אם אתם לא יודעים, הדרך הפשוטה ביותר היא ליצור קובץ (השם לא משנה) בשרת המקומי שיכיל:

כעת, הריצו את הקובץ בדפדפן וחפשו את המחרוזת הבאה: Loaded Configuration File:

phpinfo loaded configuration file
העתיקו את הנתיב ללא php.ini.

כשאתם מחומשים בנתיב התקנת ה – PHP, היכנסו ללוח הבקרה (Control Panel) > מערכת (System) > הגדרות מערכת מתקדמות (Advanced system settings) > משתני סביבה (Environment Variables):

משתני סביבה בפאנל ניהול

החלון שנפתח מציגים בפניכם את כל משתני הסביבה של המערכת, מחולקים למשתני סביבה ספציפיים למשתמש ומשתני סביבה גלובליים.
אם אתם מעוניינים להתקין PHP במסוף רק עבור המשתמש הספציפי איתו אתם מחוברים, חפשו את המשנה Path בחלק העליון:
User Path

אם אתם מעוניינים להתקין PHP במסוף עבור כל המשתמשים, חפשו את המשתנה Path בחלק התחתון:

System Path

סמנו את המשתנה ולחצו על עריכה (Edit) ובמסך שנפתח, לחצו על הכפתור "חדש" (New) והדביקו את נתיב ההתקנה של PHP:

הוספת PHP למשתנה הסביבה PATH

כמאמר השיר של סטטיק ובנאל תבורי – לחצו OK OK OK ו… שימו PHP!
בחלק ממערכות ההפעלה תצטרכו לבצע הפעלה מחדש בטרם השינויים יכנסו לתוקף ובכל מקרה עליכם לפתוח חלון מסוף חדש.
הקלידו בו את הפקודה מתחילת השלב:

php -v

ועכשיו, אתם אמורים לראות מול עיניכם את גרסת ה – PHP שמותקנת על מחשבכם. בשעה טובה ומוצלחת – יש PHP במסוף!

שלב ב' – התקנת Composer

התקנה באמצעות אשף

הדרך הפשוטה ביותר היא להוריד את קובץ ההתקנה כאן ולהתקין באמצעות ממשק התקנה ווינדוסי-טיפוסי.
ההתקנה מבצעת עבורכם שתי פעולות:

  1. מתקינה את הכלי
  2. מוסיפה אותו ל – PATH ככה שתוכלו להשתמש בו גלובלית

יש לסגור את המסוף ולפתוח אותו מחדש בסיום ההתקנה.

סיימתם? אתם יכולים לעבור למדריך!

התקנה ידנית

אפשרות נוספת היא להתקין באופן ידני את הכלי.
כדי לבצע התקנה ידנית, עליכם לבצע את שלב א' (התקנת PHP במסוף).
האפשרות הראשונה עדיפה עבור רוב המשתמשים, במיוחד אם אין לכם ידע בסיסי במשתני מערכת ושימוש במסוף.

פתחו את המסוף ונווטו לתיקייה שבה תרצו להתקין את הכלי, לדוגמה בנתיב הבא:

C:\bin

והכניסו את ארבע הפקודות הבאות (לפי הסדר):

הסבר קצר לגבי הפקודות:

  1. מורידה את סקריפט ההתקנה של הכלי
  2. מאמתת את קובץ ההתקנה
  3. מריצה את קובץ ההתקנה ומורידה את הקובץ composer.phar
  4. מוחקת את קובץ ההתקנה (composer-setup.php)

כעת צרו קובץ composer.bat באמצעות הרצת השורה הבאה:

C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat

עכשיו חזרו על שלב א', רק שבמקום להוסיף את ההתקנה של PHP ל – PATH, הוסיפו את ההתקנה של Composer.

לא משנה באיזו דרך בחרתם, אם הגעתם עד הלום – הכלי אמור להיות זמין לשימוש. בואו נבדוק:

הריצו במסוף את הפקודה הבאה, שמדפיסה את הגרסה המותקנת:

composer -V

אם מוצגת למול עיניכם גרסת ה – Composer שברשותכם, טפחו לעצמכם קלות על השכם – שרדתם את התקנת הכלי! כפיים!

מדריך התקנה ב – Linux / Unix / OSX

שלב א' – התקנת Composer

הריצו את ארבע הפקודות הבאות במסוף:

הסבר על הפקודות אפשר לקבל בשלב ב' של מדריך ההתקנה למשתמשי ווינדוס.
בקצרה – הפקודות מריצות סקריפט התקנה שמוריד קובץ בשם composer.phar.

שלב ב' – הזזת composer.phar ל PATH

עכשיו אנחנו רוצים להזיז את הקובץ הזה לתיקייה שנמצאת בנתיב המערכת (PATH). לשם כך נריץ את הפקודה הבאה:

mv composer.phar /usr/local/bin/composer

  • אם התקבלה שגיאת הרשאות, השתמשו ב sudo
  • אם התיקייה /usr לא קיימת, צרו אותה:
    mkdir -p /usr/local/bin
  • איך לשנות את ה – PATH

כמובן שאתם יכולים למקם את הקובץ בכל תיקייה שהיא, כל עוד התיקייה נמצאת בנתיב המערכת.

כדי לבדוק האם צלחתם את ההתקנה, הריצו במסוף את הפקודה הבאה:

composer -V

אם מוצגת למול עיניכם גרסת ה – Composer שברשותכם, דעו שהצלחתם ?

מוכנים? בואו נלחין קצת PHP עם Composer!

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

composer.json

כאמור, Composer הוא כלי לניהול תלויות בפרוייקט.
כשנרצה להשתמש בכלי בפרוייקט מסויים, ניצור קובץ composer.json בתיקייה הראשית של הפרוייקט.

composer.json הוא קובץ ההגדרות שלפיו הכלי פועל ועבור כל פרוייקט ניצור קובץ הגדרות חדש.
שימו לב ש – JSON, בניגוד ל – PHP, רגיש לפסיקים מיותרים וסוגי נתונים לא נכונים (אם JSON יצפה לערך בוליאני ונזין "true", נקבל שגיאה).

כל קובץ composer.json יכיל עצם אחד בלבד שיתאר את הפרוייקט:

המידע היחיד שאנחנו חייבים להעביר לעצם הוא רשימת החבילות שהפרוייקט דורש, או אם להשתמש במינוח נכון יותר: רשימת התלויות של הפרוייקט, באמצעות התכונה require:

כמו שאתם יכולים לראות, require היא עצם שבתוכו נפרט על התלויות של הפרוייקט:

שם התכונה (vendor-name/package-name) מכיל את החבילה שבה אנחנו רוצים להשתמש וערך התכונה מכיל הגבלות גרסה.
שימו לב שכדי לייבא חבילה, עלינו "לגלות" ל – Composer גם מי הוא המפיץ (vendor) וגם מה שם החבילה (package-name).
מעבר לרשימת התלויות (require), יש עוד הרבה מאד מידע שאפשר להעביר לעצם, כמו תלויות לפיתוח (require-dev), טעינה אוטומטית (autoload) ועודהגדרות שעליהן ארחיב במאמר נפרד.

* בסוף המדריך רשמתי CHEATSHEET עם מספר פקודות-מסוף נפוצות, כולל פקודה לייבוא חבילה.

חבילה? על שום מה ולמה?

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

כל חבילה היא פרוייקט Composer ומכילה קובץ composer.json ובו רשימת תלויות לצד מידע נוסף: שם החבילה, יוצר, גרסה, תלויות ועוד.
כאמור, יש ארבעה סוגי חבילות:

ספריה

ברירת מחדל.
כאשר דורשים חבילה מסוג ספריה, כל קבצי החבילה מועתקים לפרוייקט קיים.

פרוייקט

חבילה שיוצרת פרוייקט חדש.
דוגמה לחבילות כאלה: Symphony, SilverStripe, Laravel ועוד

מטא

חבילה ריקה שמכילה רשימת תלויות.

פלאגין

חבילה שמספקת אשף התקנה לחבילה עם סוג מותאם אישית

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

ALRIGHT! עברנו על כל המידע שצריך כדי להתחיל להשתמש ב – Composer. אבל רגע, מאיפה בעצם החבילות האלה מגיעות?!

Packagist: מאגר חבילות PHP

Packagist הוא מאגר חבילות PHP ל – Composer.
אלא אם הוגדר אחרת, כשנייבא חבילה לפרוייקט היא תגיע מ – Packagist.

כל אחד יכול לשלוח חבילות למאגר ופה טמון הכוח שבו – 136,965 חבילות (נכון לכתיבת המאמר, ככל הנראה בפועל המספר גבוה יותר) וסדר גודל של 12 מיליון חבילות מותקנות בחודש הופכים אותו למאגר החבילות הפופולרי ביותר, אבל לא היחיד: כל אחד יכול להקים מאגר פרטי / ציבורי של חבילות, אבל זה כבר נושא מתקדם שאני מבטיח לכתוב עליו!

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

PasswordApi

PasswordAPI הינו ממשק קטנטן שמאפשר לחולל סיסמאות ומחזיר אותן באחד ממבני הנתונים הבאים: JSON, XML או טקסט רגיל.

ישנם שני סוגי סיסמה:

  • לא-קריאה: מורכבת מרצף תווים חסר משמעות
  • קריאה: מורכבת ממילים

עבור סיסמה לא-קריאה, המשתמש יכול להחליט:

  • מה יהיה אורך הסיסמה
  • האם תכיל תווים מיוחדים
  • האם תכיל אותיות קטנות
  • האם תכיל אותיות גדולות
  • האם תכיל מספרים

עבור סיסמה קריאה, המשתמש יכול להחליט:

  • מה יהיה אורך הסיסמה

בנוסף, המשתמש יכול לקבוע כמה סיסמאות הוא רוצה לחולל וכמובן באיזה פורמט הוא מעוניין לקבל אותן.

לפני שאני מתחיל לפתח, אני אוהב לרשום בצורה מסודרת בדיוק מה אני צריך לעשות:

computer

מחוללת סיסמה לא-קריאה.

  • שיטת בקשה: GET
  • נתיב: /computer
  • פרמטרים:
    • passwordLength (מספר, ברירת מחדל: 8)
    • specialChars (בוליאני, ברירת מחדל: false)
    • lowerCase (בוליאני, ברירת מחדל: true)
    • upperCase (בוליאני, ברירת מחדל:true)
    • numbers (בוליאני, ברירת מחדל: true)
    • count (בוליאני, ברירת מחדל: 1)
    • returnType (מחרוזת, ברירת מחדל: JSON, אפשרויות: JSON, XML, TEXT)

human

מחוללת סיסמה קריאה.

  • שיטת בקשה: GET
  • נתיב: /human
  • פרמטרים:
    • passwordLength (מספר, ברירת מחדל: 13)
    • count (מספר, ברירת מחדל: 1)
    • returnType (מחרוזת, ברירת מחדל: JSON, אפשרויות: JSON, XML, TEXT)

כמו שאתם שמים לב, הממשק מאד פשוט ומכיל רק שתי קריאות אפשריות.

נפתח תיקייה חדשה עבור הפרוייקט בשרת המקומי שתכיל, כרגע, רק את הקובץ composer.json.
בתוך הקובץ ניצור עצם JSON ריק: {}.

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

ניגש ל – Packagist.org ונחפש את המחרוזת password
אתרו את החבילה hackzilla/password-generator ולחצו עליה כדי לפתוח את מסך החבילה שמכיל מידע על החבילה: שם, תיאור, גרסאות ותלויות;
בואו נתעכב על התלויות:

בתחילת המדריך הסברתי ש – Composer הוא כלי לניהול תלויות בפרוייקט.
כל חבילה נחשבת לפרוייקט כלומר – כל חבילה מכילה קובץ composer.json רשימת תלויות לצד פרטים נוספים (שם החבילה, מי עומד מאחוריה, גרסה ועוד)
החבילה hackzilla/password-generator למשל, תלויה רק בגרסה 5.3.2 ומעלה של PHP.
ממש תכף נסתכל על חבילה שתלויה בחבילות אחרות.

בקובץ composer.json, נוסיף את התכונה require ובתוכה את החבילה:

ככל הנראה, אתם שואלים את עצמכם שתי שאלות כרגע:

איך אני אמור לדעת להשתמש בחבילות?

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

למה, למען השם, יש כוכבית בגרסת החבילה?!

שאלה מעולה! 🙂

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

גרסה מדוייקת

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

טווח לוגי

נגדיר טווח גרסאות באמצעות אופרטורים:

גם קשרים לוגיים באים בחשבון:

  • או (OR):||
  • וגם (AND):   (רווח) או , (פסיק)

טווח רגיל

אפשר גם להגדיר טווח עם מקף -:

Wildcard

נוכל להגדיר תבנית גרסה.
למשל, אם נרצה להשתמש בגרסה הכי חדשה של החבילה, אבל להישאר בדומיין של גרסה 2.0, נשתמש באופרטור *:

טילדה

למי שלא יודע, הסימן ~ נקרא בעברית.. טילדה!
השימוש העיקרי בטילדה הוא לחבילות שאוכפות גרסאות סמנטיות, ככה שאם אין לכם מושג על מה מדובר, יהיה לכם קשה להבין מה הכוונה ולמה הטילדה קיימת.
נשתמש בו כדי להגדיר מהי גרסת המינימום בה אנחנו מוכנים להשתמש ובו זמנית להגדיר שאנחנו רוצים להישאר בדומיין של הגרסה המשנית (המספר השני). מה הכוונה? אסביר באמצעות דוגמה:

יכולנו להשיג אותה תוצאה על-ידי שימוש בטווח לוגי: >=3.1.0 <3.2.0

קארט

קארט ^ דומה מאד בהתנהגות שלו לטילדה, אבל גמיש יותר: הוא מורה לסקריפט ההתקנה להישאר בדומיין של הגרסה הראשית, אך מאפשר לו להוריד גרסה משנית גבוהה יותר:

הגמישות של הקארט מתאימה יותר לגרסה 2.0.0 של גרסאות סמנטיות והשימוש בו רווח יותר מאשר בטילדה.

הגבלות נוספות

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

בחזרה לממשק:

מצאנו את החבילה שתחולל עבורנו סיסמאות בקלות ובנוחות. השלב הבא הוא לקבל בקשות ולהחזיר תשובות – כלומר לבנות ראוטר.
בשביל המדריך אשתמש ב – Slim Framework, סביבת פיתוח קלה להתמודדות עם הודעות HTTP.

אתרו את החבילה במנוע החיפוש של packagist; שימו לב שבניגוד לחבילה הראשונה, Slim כן תלויה בחבילות נוספות:

slim requires

האם זה אומר שעלינו לציין את כל החבילות האלה בקובץ ההגדרות שלנו? תכף נגלה:
כמו שעשינו עם hackzilla/password-generator, נוסיף גם את החבילה הזו לרשימת התלויות שלנו בקובץ composer.json:

התקנת החבילות

פתחו את המסוף, נווטו לתיקיית הפרוייקט והריצו את הפקודה הבאה:

composer install

וכאן הקסם מתחיל לקרות: הפקודה install מתקינה את כל התלויות של הפרוייקט:

composer install
(אם אצלכם המסך נראה קצת שונה ומופיעות הודעות 'Downloading' זה בסדר – מכיוון שהתקנתי בעבר את הספריות הללו, הן נטענות מהמטמון)

הכלי יודע להתקין את כל התלויות, גם אלה של החבילות, מבלי שנצטרך לציין אותן מפורשות. דיי מגניב, לא?
אם תציצו בתיקיית הפרוייקט, תוכלו לראות שנוספה תיקייה חדשה בשם vendor שמכילה את כל התלויות של הפרוייקט לצד קובץ autoload.php.

איך להשתמש בחבילות

צרו קובץ חדש בשם index.php בתיקיה הראשית של הפרוייקט.
חשוב לי להבהיר, שבעולם האמיתי ככל הנראה לא היינו בונים ממשק בצורה כזו – בקובץ אחד בו הכל מרוכז; בשביל שהדברים יהיו פשוטים וקלים לביצוע ככל האפשר, במדריך הזה כן נרכז את הקוד תחת index.php.
כדי להשתמש בחבילות עלינו לטעון את הקובץ autoload.php שנמצא בתיקייה vendor:

הקובץ הזה מבצע טעינה אוטומטית של כל החבילות שבהן נעשה שימוש בפרוייקט.
במאמר הזה אני לא אסביר איך מתבצעת טעינה אוטומטית, אבל אם אין לכם סבלנות לחכות שאכתוב על כך (ואני אכתוב), אתם יכולים לקרוא על טעינה אוטומטית ב – Composer כאן.

עכשיו כשכל החבילות זמינות לשימוש, בואו נכתוב קצת PHP איתן, כדי שתדעו שאני לא עובד עליכם!

מחולל הסיסמה יעבוד לפי ארבעת השלבים הבאים:

  1. מתקבלת בקשת GET לסיסמה לא-קריאה (/computer) או לסיסמה קריאה (/human)
  2. נעשית בדיקה האם התקבלו פרמטרים שונים מברירת המחדל
  3. יצירת הסיסמאות
  4. הסיסמאות מוחזרות בפורמט המתאים

'תפיסת' בקשות GET מתאימות (סיסמה קריאה / לא קריאה)

ונגדיר את הראוטר שלנו על-פי טבלת הפעולות הזמינות:

הפונקציה get מקבלת שני פרמטרים:

  1. נתיב
  2. פונקציה שתבוצע כאשר התקבלה בקשת GET לנתיב שצוין

גם הפונקציה האנונימית שתבוצע בעת בקשת GET מתאימה מקבלת שלושה פרמטרים:

  1. מופע שמתאר את בקשת ה – HTTP שהתקבלה
  2. מופע שמתאר את התשובה שנחזיר
  3. ארגומנטים שהתקבלו עם הבקשה

השוואת פרמטרים לברירת המחדל

בשלב השני נגדיר פונקציית עזר שמשווה בין ברירת המחדל לפרמטרים שהתקבלו:

יצירת הסיסמאות

אם נסתכל בתיעוד של hackzilla/password-generator נוכל למצוא שתי מחלקות שמתאימות בדיוק למה שאנחנו צריכים: computerPasswordGenerator ו – humanPasswordGenerator.

computerPasswordGenerator ישמש אותנו ליצירת סיסמה חסרת-משמעות:

  • $request->getQueryParams() מחזירה מערך של פרמטרי Query string

humanPasswordGenerator ישמש אותנו ליצירת סיסמה שמורכבת ממילים:

לצערי, התיעוד של החבילה hackzilla/password-generator לוקה בחסר, מה שעלול לקרות מידי פעם.
במקרים כאלה יש לנו שתי אפשרויות:

  1. GOOGLE IT
  2. להיכנס לקבצי המקור ולהבין מה קורה שם

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

החזרת הסיסמאות במבנה הנתונים המתאים

הדבר האחרון שנשאר לנו לעשות הוא להחזיר את הסיסמאות בפורמט המתאים – כלומר JSON או XML או TEXT.
הממ.. למישהו יש רעיון איך נעשה את זה? אפשר לכתוב מחלקה שתעשה את זה בשבילנו, אבל למה אנחנו לומדים Composer? בואו נחפש חבילה כזאת 🙂

אחרי חיפוש קצר, מצאתי את החבילה jms/serializer שבצירוף מקרים מדהים תומכת בשלושת סוגי הנתונים שהממשק שלנו מחזיר!
הוסיפו את החבילה לקובץ ההגדרות:

והריצו את הפקודה: composer install

אם מילאתם אחר הוראות המדריך כראוי, קיבלתם את ההודעה הבאה:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files

ההודעה הזו נותנת לנו שלוש פיסות אינפורמציה:

  1. בניגוד לפעם הקודמת בה הרצנו את הפקודה composer install, הפעם הכלי מתקין את התלויות שנמצאות ב'lock file'
  2. אזהרה שה – 'lock file' שלנו לא מעודכן!
  3. יש להריץ את הפקודה update

אבל רגע, מה זה בכלל ה – 'lock file' הזה?

composer.lock

את התלויות של הפרוייקט ומידע נוסף אנחנו מגדירים בקובץ composer.json. כאשר אנחנו קוראים לפקודה composer install בפעם הראשונה, נוצר קובץ נוסף שאולי שמתם לב אליו בשם composer.lock שהוא בעצם ה – 'lock file' המפורסם מהפסקה הקודמת.
קובץ המנעול 'נועל' את האפליקציה למצב מסויים ומציין באופן מפורש את החבילות בהן נעשה שימוש כולל גרסה מלאה, מקור ועוד.

אם ב – composer.json, נכתוב:

והגרסה המתאימה ביותר נכון לרגע שבו התקנו את החבילות (כלומר הרצנו את הפקודה composer install) היא 1.0.7, בקובץ המנעול יצויין שאנחנו משתמשים בחבילה בגרסה 1.0.7:

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

חפרת.. מה אני עושה עכשיו?

כשאנחנו מעוניינים לעדכן את התלויות של הפרוייקט, נשתמש בפקודה composer update, שבפועל עושה את הפעולות הבאות:

  1. קוראת את הקובץ composer.json
  2. מתקינה את החבילות שנדרשו בגרסאות המתאימות
  3. כותבת קובץ composer.lock חדש כדי שישקף את מצב הפרוייקט לאחר העדכון
  4. מחוללת קבצי טעינה אוטומטית

חשוב להבין שהפעולה composer install בודקת האם הקובץ composer.lock קיים:

  1. אם לא: מבצעת את הפעולה composer update
  2. אם כן: מתקינה את החבילות הנדרשות לפי הקובץ composer.lock
  3. מחוללת קבצי טעינה אוטומטית

ובכן, למה אתם מחכים? הריצו את הפקודה composer update והחבילה החדשה שלנו תותקן ונוכל לסיים את הממשק שלנו.
שימו לב שהפקודה מבצעת עדכון ומתקינה רק חבילות חדשות / חבילות עם גרסה חדשה יותר, בהתאם להגבלות.
נוסיף מתחת לפונקציה compareSettings שלוש פעולות עזר שחוזרות על עצמן בין אם המשתמש בחר בסיסמה לא קריאה ובין אם בחר בסיסמה קריאה:

  • serializePasswords משתמשת בחבילה שזה עתה ייבאנו, jms/serializer כדי להפוך את המערך שלנו לטיפוס הנתונים המתאים
  • getHeaderContentType מחזירה את סוג הנתונים שנשלח ב – Header של התגובה
  • generateResponse מייצרת תגובה חדשה עם הנתונים שהתקבלו משתי הפונקציות למעלה

כל שנותר לנו לעשות הוא לקרוא לפונקציה generateResponse בפונקציות האנונימיות שלנו, ונקבל את הקוד המלא של הממשק:

הפעולה $app->run() מפעילה את הראוטר.

וזהו זה! יש לנו ממשק מחולל סיסמאות לתפארת!

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

כמובן שתצטרכו לגשת לנתיב הרצוי עם הפרמטרים, לדוגמה:

http://localhost/passwordApi/index.php/human?passwordLength=20&count=5

בונוס: להקים שרת מקומי עם המסוף

אם התקנתם PHP במסוף כפי שהמלצתי, אתם יכולים להקליד את השורה הבאה, מתוך תיקיית הפרוייקט:

php -S localhost:8000

ושרת חדש יקום בכתובת http://localhost:8000

ואז תוכלו לבצע את הבדיקות בשרת מבודד:

http://localhost:8000/index.php/human?passwordLength=20&count=5

CHEATSHEET: פקודות נפוצות למסוף

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

install

composer install

מתקינה את תלויות הפרוייקט לפי הקובץ composer.lock או composer.json, אם הראשון לא קיים מבצעת את הפקודה update

תיעוד מלא

update

composer update

מתקינה את תלויות הפרוייקט לפי הקובץ composer.json וכותבת קובץ composer.lock חדש

תיעוד מלא

require

composer require vendor/package:version

מוסיפה לקובץ composer.json את החבילה שצוינה ומריצה את הפקודה composer install/update

תיעוד מלא

remove

composer remove vendor/package

מוחקת מקובץ composer.json את החבילה שצוינה ומריצה את הפקודה composer update

תיעוד מלא

זה לא הסוף..

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

אבל אל תיכנסו לאופוריה! עוד יש לנו על מה לעבור ואני מבטיח שאני ארשום מאמר המשך עם נושאים מתקדמים יותר כמו התקנת חבילות גלובלית, טעינה אוטומטית, כתיבת חבילות ועוד.
עד לפעם הבאה 🙂

אם הגעת עד לפה, הגיע הזמן להירשם לניוזלטר!

Summary
Article Name
המדריך השלם ל - Composer
אודות 
hello world! אני יונתן, מתעסק בתכנות ופיתוח WEB פלוס מינוס מאז שאני זוכר את עצמי. ב2013 הקמתי את קבוצת סיזן ביחד השותף היקר שלי - שלומי שלומקה זק. ביום מתעסק בפיתוח ועיצוב אתרי אינטרנט ואפליקציות, עיצוב חוויית משתמש, הקמת מיזמים, ועוד..אבל מה שלא ידעתם עליי - זה שבלילה אני באטמן. אל תגלו לאף אחד!

3 תגובות

  1. יניב

    26 באפריל 2017 - 0:47
    תגובה

    תודה על המדריך המושקע!

  2. חגית

    16 בדצמבר 2018 - 15:07
    תגובה

    מאמר מצוין. תודה רבה!

  3. יהודה

    4 ביוני 2019 - 19:58
    תגובה

    תותח!!

השאר/י תגובה ליניב

לבטל

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