الفرق بين المراجعتين لصفحة: «Laravel/views»
رؤيا-بنعطية (نقاش | مساهمات) لا ملخص تعديل |
رؤيا-بنعطية (نقاش | مساهمات) لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:الواجهات}}</noinclude> | ||
== إنشاء الواجهات == | == إنشاء الواجهات == | ||
ملاحظة: هل تبحث عن مزيد من المعلومات حول كيفية كتابة قوالب Blade؟ ألق نظرة على [[Laravel/blade|توثيق Blade]] الكامل للبدء. | ملاحظة: هل تبحث عن مزيد من المعلومات حول كيفية كتابة قوالب Blade؟ ألق نظرة على [[Laravel/blade|توثيق Blade]] الكامل للبدء. |
مراجعة 11:23، 19 أكتوبر 2018
إنشاء الواجهات
ملاحظة: هل تبحث عن مزيد من المعلومات حول كيفية كتابة قوالب Blade؟ ألق نظرة على توثيق Blade الكامل للبدء.
تحتوي الواجهات على HTML الذي يُقدّمه تطبيقك وتفصل منطق وحدة التحكّم/منطق التطبيق من منطق عرضك التقديمي (presentation logic). تُخزّن الواجهات في المُجلّد resources/views. قد تشبه الواجهة البسيطة المثال التالي:
<! - الواجهات مُخزّنة في resources/views/greeting.blade.php ->
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
كما ترى، يُوافق المّتغيّر الوسيط الأوّل المُمرّر إلى المُساعد view اسم ملف الواجهة في المجلّد resources/views. المتغيّر الوسيط الثاني هو مصفوفة البيانات التي يجب أن تُتاح للواجهة. نقوم في هذه الحالة بتمرير المتغيّر name
الذي يُعرض في الواجهة باستخدام صيغة Blade.
يمكن أيضًا تضمين (nesting)الواجهات ضمن مُجلّدات فرعية من المُجلّد resources/views. يمكن استخدام الترميز "نقطة" للإشارة للعروض المتداخلة (nested). مثلا، إن خُزّن عرضك في resources/views/admin/profile.blade.php
، يمكنك الإشارة إليه (reference it) على النحو التالي:
return view('admin.profile', $data);
تحديد إن كانت الواجهة موجودة
إن كنت بحاجة لتحديد إن كانت الواجهة موجودة، يمكنك استخدام الواجهة الساكنة View (أي View facade). سيرد التابع exists
بالقيمة true
إن وُجدت الواجهة:
use Illuminate\Support\Facades\View;
if (View::exists('emails.customer')) {
//
}
إنشاء أوّل واجهة متاحة
يمكنك إنشاء الواجهة الأولى في مصفوفة معيّنة من الواجهات باستخدام التابع first
. يُفيدك هذا إن سمح تطبيقك أو حزمتك بتخصيص الواجهات أو إعادة تعريفها (overwriting):
return view()->first(['custom.admin', 'admin'], $data);
يمكنك أيضا مناداة هذا التابع عبر الواجهة الساكنة View:
use Illuminate\Support\Facades\View;
return View::first(['custom.admin', 'admin'], $data);
تمرير البيانات للواجهات
كما رأيت في الأمثلة السابقة، يمكنك تمرير مصفوفة من البيانات للواجهات:
return view('greetings', ['name' => 'Victoria']);
عند تمرير المعلومات بهذه الطريقة ، يجب أن تكون البيانات مصفوفة من الأزواج مفتاح / قيمة. يمكنك الوصول لكل قيمة باستخدام مفتاحها المُوافق داخل واجهتك، مثل <?;php echo $key ?>
. كبديل لتمرير مصفوفة كاملة من البيانات إلى دالّة المُساعد view
، يمكنك استخدام التابع with
لإضافة أجزاء منفردة من البيانات للواجهة:
return view('greeting')->with('name', 'Victoria');
مشاركة البيانات مع جميع الواجهات
قد تحتاج من حين لآخر إلى مشاركة جزء من البيانات مع جميع الواجهات
التي يصيّرها تطبيقك. يمكنك استخدام التابع share
من واجهة العرض الساكنة (view facade) للقيام بذلك. عادة، عليك وضع نداءات المشاركة داخل تابع مقدّم الخدمات boot
. لك حريّة إضافتها إلى AppServiceProvider
أو إنشاء مُقدّم خدمة منفصل لإيوائها:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* تمهيد أي خدمة تطبيق
*
* @return void
*/
public function boot()
{
View::share('key', 'value');
}
/**
* سجّل موفّر الخدمة
*
* @return void
*/
public function register()
{
//
}
}
مؤلّفو الواجهات (View Composers)
مُؤلّفو الواجهات هم ردود نداء أو دوال أصناف تُستدعى عند تصيير الواجهة. يستطيع مؤلفو الواجهة أن يساعدوك إن كانت لديك بيانات ترغب في ربطها بواجهة ما في كل مرة يُصيّر فيها في تنظيم المنطق اللازم في موضع واحد.
في هذا المثال، فلنسجِّل مؤلفي الواجهة في مقدّم خدمات. سنستخدم الواجهة الساكنة View
للوصول لتعريف استخدام العقد Illuminate\Contracts\View\Factory
الأساسي. تذكر أن Laravel لا يحتوي على مجلّد افتراضي لمؤلّفي الواجهات. لديك حريّة تنظيمها كما شئت. يمكنك على سبيل المثال إنشاء مجلّد app/Http/ViewComposers
:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* تسجيل الارتباطات في الحاوي.
*
* @return void
*/
public function boot()
{
// استخدام المؤلّفين على أساس الصنف ...
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
// Closure استخدام المؤلّفين على أساس
View::composer('dashboard', function ($view) {
//
});
}
/**
* تسجيل مقدم الخدمة.
*
* @return void
*/
public function register()
{
//
}
}
تنبيه: تذكر أنه إن أنشأت مقدّم خدمات جديد لاحتواء تسجيلات مؤلف واجهاتك ستحتاج لإضافة مُقدّم الخدمات إلى مصفوفة providers
في ملف الإعدادات config/app.php
.
بعد تسجيلنا للمؤلّف سيُنفّذ الآن التابع ProfileComposer@compose
كل مرة تُصيّر فيها الواجهة profile
. لذا فنُعرّف صنف المُؤلّف:
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\UserRepository;
class ProfileComposer
{
/**
* تعريف استخدام مستودع المستخدم.
*
* @var UserRepository
*/
protected $users;
/**
* profile أنشئ مؤلّف جديد من
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
// Dependencies automatically resolved by service container...
$this->users = $users;
}
/**
* إربط البيانات بالواجهة
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('count', $this->users->count());
}
}
يُستدعى تابع المُؤلّف compose
قبل تصيير الواجهة بالظبط مع النسخة Illuminate\View\View
. يمكنك استخدام التابع with
لربط البيانات بالواجهة.
ملاحظة: يُستبين كل مؤلّفو الواجهة عبر حاوي الخدمات، لذا تستطيع التلميح على نوع أي إعتماديّة تحتاجها داخل تابع بناء المؤلّف.
إرفاق المُؤلّف مع عدّة واجهات
يمكنك إرفاق أحد مؤلّفي الواجهة بعدة واجهات مرّة واحدة بتمرير مصفوفة من الواجهات كالمُتغيّر الوسيط الأوّل للتابع composer
:
View::composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
يقبل التابع composer أيضًا الحرف * كحرف بدل خاص (wildcard)، مما يتيح لك إرفاق مُؤلّف بكل الواجهات:
View::composer(
['profile', 'dashboard'],
'App\Http\ViewComposers\MyViewComposer'
);
مُنشؤوالواجهات (View creators )
يشبه مُنشؤو الواجهات مؤلّفي الواجهات جدًا؛ مع فارق أنّها تُنفّذ مباشرة بعد إنشاء نسخة (instantiating) الواجهة بدلاً من الانتظار حتى ينتهي تصييره. لتسجيل منشئ واجهة استخدم التابع creator
:
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');