هل سبق لك إنشاء وحدة تحكم حيث كان عليك القيام بالكثير من العمل لإعداد المتغيرات لتمريرها إلى طريقة العرض؟ يمكنك نقل هذا النوع من العمل إلى ما يسمى بنموذج العرض. في الأساس، نماذج العرض هي فئات بسيطة تأخذ بعض البيانات وتحولها إلى شيء قابل للاستخدام في العرض.
ستجد شرحًا أكثر تفصيلاً وبعض الأمثلة الجيدة في منشور المدونة هذا على Stitcher.io.
إن مؤلفي العرض الأصليين في Laravel ليسوا مثل نماذج العرض التي توفرها هذه الحزمة. لمعرفة المزيد حول الاختلافات، انتقل إلى منشور المدونة هذا على Stitcher.io.
نحن نستثمر الكثير من الموارد في إنشاء أفضل الحزم مفتوحة المصدر في فئتها. يمكنك دعمنا عن طريق شراء أحد منتجاتنا المدفوعة.
نحن نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها. ستجد عنواننا على صفحة الاتصال لدينا. ننشر جميع البطاقات البريدية المستلمة على جدار البطاقات البريدية الافتراضية لدينا.
يمكنك تثبيت الحزمة عبر الملحن:
composer require spatie/laravel-view-models
نموذج العرض هو فئة يمكنك من خلالها وضع بعض المنطق المعقد لوجهات نظرك. هذا سيجعل وحدات التحكم الخاصة بك أخف قليلاً. يمكنك إنشاء نموذج عرض عن طريق توسيع SpatieViewModelsViewModel
المتوفرة.
class PostViewModel extends ViewModel
{
public $ user ;
public $ post ;
public $ indexUrl = null ;
public function __construct ( User $ user , Post $ post = null )
{
$ this -> user = $ user ;
$ this -> post = $ post ;
$ this -> indexUrl = action ([PostsController::class, ' index ' ]);
}
public function post (): Post
{
return $ this -> post ?? new Post ();
}
public function categories (): Collection
{
return Category:: canBeUsedBy ( $ this -> user )-> get ();
}
}
ثم يمكنك استخدام فئة نموذج العرض في وحدة التحكم الخاصة بك مثل هذا:
class PostsController
{
public function create ()
{
$ viewModel = new PostViewModel (
current_user ()
);
return view ( ' blog.form ' , $ viewModel );
}
public function edit ( Post $ post )
{
$ viewModel = new PostViewModel (
current_user (),
$ post
);
return view ( ' blog.form ' , $ viewModel );
}
}
في طريقة العرض يمكنك القيام بذلك:
< input type = " text " value = " {{ $post -> title } } " />
< input type = " text " value = " {{ $post -> body } } " />
< select >
@foreach ( $categories as $category )
< option value = " {{ $category -> id } } " > {{ $category -> name } } </ option >
@endforeach
</ select >
< a href = " {{ $indexUrl } } " >Back</ a >
يتم عرض كافة الأساليب والخصائص العامة في نموذج العرض تلقائيًا للعرض. إذا كنت لا تريد إتاحة طريقة معينة في طريقة العرض الخاصة بك، فيمكنك تجاهلها.
class PostViewModel extends ViewModel
{
protected $ ignore = [ ' ignoredMethod ' ];
/ / …
public function ignoredMethod () { / * … * / }
}
يتم تجاهل جميع الأساليب السحرية المضمنة في PHP تلقائيًا.
من الممكن إرجاع نموذج عرض مباشرةً من وحدة التحكم. افتراضيًا، يتم إرجاع استجابة JSON مع البيانات.
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return new PostViewModel ( $ post );
}
}
يمكن أن يكون هذا الأسلوب مفيدًا عند العمل مع نماذج AJAX المقدمة.
من الممكن أيضًا إرجاع العرض مباشرةً:
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return ( new PostViewModel ( $ post ))-> view ( ' post.form ' );
}
}
لاحظ أنه عند تعيين رأس Content-Type
للطلب على JSON، فإن هذا الأسلوب سيعيد أيضًا بيانات JSON بدلاً من العرض المعروض.
يمكن أن تعرض نماذج العرض الوظائف التي تتطلب معلمات إضافية.
class PostViewModel extends ViewModel
{
public function formatDate ( Carbon $ date ): string
{
return $ date -> format ( ' Y-m-d ' );
}
}
يمكنك استخدام هذه الوظائف في العرض كما يلي:
{{ $ formatDate ( $post -> created_at ) } }
تضمنت الحزمة أمرًا حرفيًا لإنشاء نموذج عرض جديد.
php artisan make:view-model HomepageViewModel
سيحتوي نموذج العرض هذا على مساحة الاسم AppViewModels
وسيتم حفظه في app/ViewModels
.
أو في مساحة اسم مخصصة، على سبيل المثال، AppBlog
php artisan make:view-model " Blog/PostsViewModel "
سيحتوي نموذج العرض هذا على مساحة الاسم AppBlogViewModels
وسيتم حفظه في app/Blog/ViewModels
.
الرجاء مراجعة سجل التغيير للحصول على مزيد من المعلومات حول ما تغير مؤخرًا.
يرجى الاطلاع على المساهمة للحصول على التفاصيل.
إذا وجدت خطأً يتعلق بالأمان، فيرجى إرسال بريد إلكتروني إلى العنوان [email protected] بدلاً من استخدام أداة تعقب المشكلات.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.