بيئة تطوير Valet في Laravel

من موسوعة حسوب

مقدمة

Valet هي بيئة تطوير Laravel لأجهزة ماك. لا حاجة إلى استخدام Vagrant، ولا ملف ‎/etc/hosts. يمكنك أيضًا مشاركة مواقعك بشكل عام باستخدام الأنفاق المحلية.

تقوم بيئة Laravel Valet بتكوين جهاز ماك الخاص بك لتشغيل Nginx دائمًا في الخلفية عند بدء تشغيل الجهاز. ثم، باستخدام DnsMasq، يقوم خادم Valet بتجميع جميع الطلبات على نطاق test.* للإشارة إلى المواقع المثبتة على جهازك المحلي.

بعبارة أخرى، بيئة تطوير Laravel فائق السرعة تستخدم ما يقرب من 7 ميغابايت من ذاكرة الوصول العشوائي RAM. لا يعد Valet بديلًا كاملًا لبرمجية Vagrant أو Homestead، ولكنه يوفر بديلًا رائعًا إذا كنت تريد أساسيات مرنة، أو تفضل السرعة القصوى، أو تعمل على جهاز يحتوي على كمية محدودة من ذاكرة الوصول العشوائي.

افتراضيًا، يشمل دعم Valet، على سبيل المثال لا الحصر:

ومع ذلك، يمكنك تمديد Valet مع برامج التشغيل المخصصة الخاصة بك (custom drivers).

بيئة Valet أم بيئة Homestead؟

تحدثنا سابقًا عن Laravel Homestead، وهي بيئة تطوير محلية أخرى من Laravel. يختلف Homestead عن Valet فيما يتعلق بالجمهور المستهدف ونهجهم في التطوير المحلي. تقدم Homestead آلة Ubuntu وهمية بالكامل مع ضبط Nginx آلي. تُعدّ Homestead خيارًا رائعًا إذا كنت ترغب في بيئة تطوير لينكس كاملة وهمية أو كنتَ تستخدم ويندووز أو لينكس كجهاز للتطوير.

يدعم Valet أجهزة ماك فقط، ويتطلب منك تثبيت PHP وخادم قاعدة البيانات مباشرة على جهازك المحلي. يتم تحقيق ذلك بسهولة باستخدام Homebrew مع أوامر مثل brew install php و brew install mysql. يوفر Valet بيئة تطوير محلية فائقة السرعة بأقل استهلاك للموارد، لذا فهو مثالي للمطورين الذين لا يحتاجون إلا إلى PHP و MySQL ولا يحتاجون إلى بيئة تطوير افتراضية تمامًا.

يعد كل من Valet و Homestead خيارًا رائعًا لضبط بيئة تطوير Laravel. أيهما تختار سوف فذلك يعتمد على ذوقك الشخصي واحتياجات فريقك.

التثبيت

يتطلب Valet نظام ماك وبرمجية Homebrew. قبل التثبيت، يجب التأكد من عدم وجود برامج أخرى مثل Apache أو Nginx تكون مرتبطة مع المنفذ 80 الخاص بجهازك المحلي.

  • تثبيت أو تحديث Homebrew إلى أحدث إصدار باستخدام brew update.
  • تثبيت PHP 7.2 باستخدام Homebrew عبر brew install php@7.2.
  • تثبيت Valet مع composer  من خلال composer global require laravel/valet. تأكد من أن المجلد ‎~/composer/vendor/bin موجود في متغير البيئة "PATH" الخاص بنظامك.
  • شغل الأمر valet install. سيقوم هذا بضبط وتثبيت Valet و DnsMasq، وتسجيل خدمة Valet عند بدء تشغيل النظام.

بمجرد تثبيت Valet، حاول  الاستعلام من خلال نطاق test.* على جهازك باستخدام أمر ping foobar.test. إذا تم تثبيت Valet بشكل صحيح، فسترى هذا النطاق يستجيب على 127.0.0.1.

سيقوم الخادم تلقائيًا بتشغيل الخدمة في كل مرة يقوم فيها الجهاز بالإقلاع. ليست هناك حاجة لتشغيل valet start أو valet install مرة أخرى مرة أخرى بمجرد اكتمال التثبيت Valet لأوّل مرة.

استخدام نطاق آخر

بشكل افتراضي، يخدم Valet مشاريعك باستخدام النطاق الرئيسي ‎.test.. إذا كنت ترغب في استخدام نطاق آخر، فيمكنك القيام بذلك باستخدام الأمر valet domain tld-name.

على سبيل المثال، إذا كنت ترغب في استخدام ‎.app بدلًا من ‎.test، فشغل valet domain app و Valet سيبدأ في عرض مشروعاتك على app.* تلقائيًا.

قاعدة البيانات

إذا كنت بحاجة إلى قاعدة بيانات، فجرّب تثبيت MySQL عن طريق تشغيل brew install mysql على سطر الأوامر الخاص بك. بمجرد تثبيت MySQL، يمكنك بدء تشغيله باستخدام الأمر brew services start mysql. يمكنك بعد ذلك الاتصال بقاعدة البيانات في 127.0.0.1 باستخدام اسم المستخدم root وسلسلة نصية فارغة لكلمة المرور.

تحديث

يمكنك تحديث تثبيت Valet باستخدام أمر composer global update في الوحدة الطرفية الخاصة بك. بعد الترقية، من الممارسة الجيدة تشغيل أمر valet install بحيث يمكن لبرمجية Valet إجراء ترقيات إضافية لملفات التهيئة الخاصة بك إذا لزم الأمر.

الترقية إلى Valet 2.0

Valet 2.0 يقوم بنقل قاعدة بيانات الإنترنت الأساسية الخاصة ببرمجية Valet من Caddy إلى Nginx. قبل الترقية إلى هذه النسخة يفضل أن تقوم بتشغيل الأوامر التالية لكي توقف وتلغي تثبيت الملفات الموجودة والمخفية الخاصة بـ Caddy.

valet stop

valet uninstall

بعد ذلك، يجب عليك الترقية إلى أحدث إصدار من Valet. يتم ذلك عادة من خلال Git أو Composer حسب كيفية تثبيت Valet. إذا ثبّتت Valet عبر Composer، يجب استخدام الأمر التالي للتحديث إلى أحدث إصدار رئيسي:

composer global require laravel/valet

بمجرد تنزيل شفرة مصدر Valet الجديدة، يجب تشغيل أمر install:

valet install

valet restart

بعد الترقية، قد يكون من الضروري إعادة إيقاف أو إعادة ربط مواقعك.

تخديم المواقع

بمجرد تثبيت Valet، ستكون مستعدًا لبدء عرض المواقع. يوفر Valet أمرين لمساعدتك في تخديم المواقع التي تستخدم  Laravel: وهما park و link.

الأمر park

  • أنشِئ مجلدًا جديدًا على جهاز ماك الخاص بك بتنفيذ أمر شبيه بالأمر mkdir ~/Sites.  ثم نفِّذ الأمر cd ~/Sites وشغِّل valet park. سيقوم هذا الأمر بتسجيل مجلد العمل الحالي كمسار يجب أن يبحث عنه Valet عن المواقع.
  • بعد ذلك، إنشِئ موقع Laravel جديد داخل هذا المجلد: laravel new blog.
  • افتح http://blog.test في متصفحك.

هذا كل ما في الأمر. الآن، سيُعرَض تلقائيًا أي مشروع Laravel يُنشَأ داخل مجلد "parked" باستخدام http://folder-name.test.

الأمر link

يمكن أيضًا استخدام الأمر link لتخديم مواقع Laravel الخاصة بك. يفيد هذا الأمر إذا كنت تريد عرض موقع واحد في مجلد وليس المجلد بأكمله.

لاستخدام الأمر، انتقل إلى أحد مشروعاتك وشغّل valet link app-name في الطرفية. سيقوم Valet بإنشاء وصلة رمزية في ‎~/.valet/Sites الذي يشير إلى مجلد العمل الحالي.

بعد تشغيل أمر link، يمكنك الوصول إلى الموقع في متصفحك على http://app-name.test.

لمشاهدة قائمة بكافة المجلدات المرتبطة، شغِّل الأمر valet links. يمكنك استخدام valet unlink app-name لإزالة الوصلة الرمزية.

ملاحظة: يمكنك استخدام valet links لتخديم نفس المشروع من نطاقات متعددة (فرعية). لإضافة نطاق فرعي أو مجال آخر إلى مشروعك، شغِّل برنامج valet link subdomain.app-name من مجلد المشروع.

تأمين المواقع مع TLS

بشكل افتراضي، يخدم Valet المواقع عبر بروتوكول HTTP. ومع ذلك، إذا كنت ترغب في عرض موقع عبر طبقة TLS مشفرة باستخدام HTTP / 2، فاستخدم الأمر secure. على سبيل المثال، إذا كان يُخدَّم موقعك بواسطة Valet على النطاق laravel.test، فيجب تشغيل الأمر التالي لتأمينه:

valet secure laravel

للعودة إلى الموقع"غير الآمن" والعودة إلى تخديم الزيارات عبر بروتوكولHTTP العادي، استخدم الأمر unsecure. مثل الأمر secure، يقبل هذا الأمر اسم المضيف الذي ترغب في عدم تأمينه:

valet unsecure laravel

مواقع المشاركة

يتضمن Valet أيضًا أمرًا لمشاركة مواقعك المحلية مع العالم. ليس هناك أي برنامج مطلوب تثبيته بعد تثبيت بيئة Valet.

لمشاركة موقع، انتقل إلى مجلد الموقع في الطرفية الخاصة بك وشغِّل الأمر valet share. سيُدرَج عنوان URL يمكن الوصول إليه بشكل عام في حافظتك، وسيكون جاهزًا إلى لصقه مباشرة في متصفحك. هذا كل ما في الأمر.

لإيقاف مشاركة موقعك، اضغط على Control+C لإلغاء العملية.

تحذير: لا يدعم valet share حاليًا مشاركة المواقع التي تم تأمينها باستخدام الأمر valet secure للصفحات.

برامج تشغيل مخصصة لبيئة Valet‏ (Custom Valet Drivers)

يمكنك كتابة "تعريف" Valet الخاص بك لخدمة تطبيقات PHP التي تعمل على إطار آخر أو نظام إدارة محتوى CMS غير معتمد أصلًا من قبل Valet. عند تثبيت Valet، يُنشَأ المجلد ‎~/.valet/Drivers الذي يحتوي على ملف SampleValetDriver.php. يحتوي هذا الملف على تطبيق برنامج تشغيل نموذج لشرح كيفية كتابة برنامج تشغيل مخصص. تتطلب كتابة برنامج التشغيل فقط تنفيذ ثلاثة توابع: serves و isStaticFile و frontControllerPath.

تتلقى جميع التوابع الثلاثة قيم ‎$sitePath و ‎$siteName و ‎$uri كوسائط. ‎$sitePath هو المسار الكامل (fully qualified path) للموقع الذي يتم عرضه على جهازك، مثل ‎/Users/Lisa/Sites/my-project. ‎$siteName هو قسم "المضيف" أو "اسم الموقع" النطاق (my-project)‏. ‎$uri هو URI للطلب الوارد (‎/foo/bar).

بمجرد الانتهاء من تعريف Valet المخصص، ضعه في المجلد ‎~/.valet/Drivers باستخدام اصطلاح التسمية FrameworkValetDriver.php. على سبيل المثال، إذا كنت تقوم بكتابة تعريف مخصص لووردبريس. فيجب أن يكون اسم ملفك هو WordPressValetDriver.php.

دعونا نلقي نظرةً على تنفيذ نموذج لكل طريقة يجب أن ينفذها مشغل Valet المخصص.

التابع serves

يجب أن يعيد التابع serves  القيمة true إذا كان على المشغل الخاص بك أن يتعامل مع الطلب الوارد. خلاف ذلك، يجب أن يرجع القيمة false. لذا، في هذا التابع يجب أن تحاول تحديد ما إذا كان ‎$sitePath يحتوي على مشروع من النوع الذي تحاول عرضه.

على سبيل المثال، دعنا نتظاهر أننا نكتب WordPressValetDriver. فقد يبدو التابع serves لدينا كما يلي:

/**

* تحديد إذا ما كان برنامج التشغيل قد خدم الطلب
*
* @param  string $sitePath
* @param  string $siteName
* @param  string $uri
* @return bool

*/

public function serves($sitePath, $siteName, $uri)
{
   return is_dir($sitePath.'/wp-admin');
}

التابع isStaticFile

يجب أن يحدد isStaticFile ما إذا كان الطلب الوارد هو ملف ثابت (static)، مثل صورة أو ملف أنماط CSS. إذا كان الملف ثابتًا، فيجب أن ترجع الطريقة المسار المؤهل بالكامل إلى الملف الثابت على القرص. إذا لم يكن الطلب الوارد لملف ثابت، فيجب أن يعيد التابع false:

/**

* تحديد إذا ما كان الطلب القادم لملف ساكن.
*
* @param  string $sitePath
* @param  string $siteName
* @param  string $uri
* @return string|false

*/

public function isStaticFile($sitePath, $siteName, $uri)

{
   if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {

  	return $staticFilePath;
   }
   return false;
}

ملاحظة: لن يستدعى التابع isStaticFile إلا إذا كان التابع serves يعيد true للطلب الوارد وإذا لم يكن الطلب URI هو /.

التابع frontControllerPath

يجب أن يعيد التابع frontControllerPath المسار المؤهل بالكامل إلى "جهاز التحكم الأمامي" الخاص بالتطبيق (front controller)، والذي يكون عادة ملف "index.php" الخاص بك أو ما يعادله:

/**
* جلب المسار المؤهل بالكامل إلى وحدة تحكم الواجهة
*
* @param  string $sitePath
* @param  string $siteName
* @param  string $uri
* @return string
*/
public function frontControllerPath($sitePath, $siteName, $uri)
{
   return $sitePath.'/public/index.php';
}

التعاريف المحلية

إذا كنت ترغب في تعريف برنامج تشغيل Valet مخصص لتطبيق واحد، قم بإنشاء LocalValetDriver.php في المجلد الجذر للتطبيق. قد يقوم برنامج التشغيل المخصص الخاص بك بتمديد قاعدة ValetDriver الأساسية أو توسيع برنامج التشغيل الخاص بالتطبيق الموجود مثل LaravelValetDriver:

class LocalValetDriver extends LaravelValetDriver

{
   /**
    *تحديد إذا ما كان برنامج التشغيل قد خدم الطلب
    *
    * @param  string $sitePath
    * @param  string $siteName
    * @param  string $uri
    * @return bool
    */
   public function serves($sitePath, $siteName, $uri)
   {
  	return true;
   }
   /**
    * جلب المسار المؤهل بالكامل إلى وحدة تحكم الواجهة
    *
    * @param  string $sitePath
    * @param  string $siteName
    * @param  string $uri
    * @return string

    */

   public function frontControllerPath($sitePath, $siteName, $uri)
   {
  	return $sitePath.'/public_html/index.php';
   }
}

مشغلات أخرى لبيئة Valet

الوصف الأمر
شغِّل هذا الأمر من مجلد "parked" لإزالته من قائمة الدليل المتوقفة. valet forget
عرض جميع مسارات "parked" الخاصة بك. valet paths
إعادة تشغيل خادم Valet. valet restart
بدء تشغيل برنامج Valet daemon. valet start
إيقاف تشغيل برنامج Valet daemon. valet stop
إلغاء تثبيت برنامج Valet daemon بالكامل. valet uninstall

مصادر