Real Time Web Analytics پرسش و پاسخ Elam

Laravel

inject@ در لاراول

نویسنده : کامران جعفری
تاریخ انتشار:
13:29:30 1394-08-19
دسترسی مستقیم به پایگاه داده در View در فریم ورک لاراول

لاراول فریم ورکی شی گرا و با ساختار MVC است. بر همین اساس برنامه هایی که با این فریم ورک نوشته می شوند از این ساختار پیروی می کنند. یکی از ویژگی های برنامه نویسی MVC، جداسازی template یا View از بخش های منطقی برنامه است. اما گاهی نیاز دارید تا در بخشی از برنامه، قوانین برنامه نویسی MVC را رعایت نکنید. لاراول برای این موضوع inject@ را پیش بینی کرده است. با لرن روت همراه باشید تا این ویژگی بسیار کاربردی لاراول را مرور کنیم.

ابتدا بهتر است تا به این موضوع بپردازیم که بطور کلی در چه زمانی نیاز است تا از ویژگی inject@ در لاراول استفاده شود؟ در برنامه نویسی(MVC(Model,View,Controller، قوانینی وجود دارند. یکی از مهم ترین قوانین آن این است که، برنامه های درگیر با پایگاه داده و بخش منطقی کد باید در فایل Model نوشته شوند، بخش درگیر با کاربر و صفحه ظاهری که در مرورگر به کاربر نمایش داده می شود، در فایل View و نهایتا ارتباط این دو بخش از طریق Controller خواهد بود. پس در فایل View نباید هیچ پردازش سمت سروری انجام شود و تنها باید از متغیرهای پردازش شده در Model که توسط Controller به View  آمده اند استفاده کرد. این خلاصه ای از برنامه نویسی MVC بود که فریم ورک لاراول نیز مبتنی بر همین ساختار است.
اما در کنار همین ساختار، ساختار ماژولار(پیمانه ای) وجود دارد. بطور خلاصه ساختار ماژولار، یعنی  هر بخش از وب سایت شما که وظیفه مشخصی دارد بصورت یک بخش جدا در نظر گرفته شود و بتوان آن را در هر زمان بدون تغییر در ساختار سایر ماژول ها تغییر داد، جابجا کرد، حذف کرد و ...
حالا این سناریو را در نظر بگیرید. شما با فریم ورک لاراول(دارای ساختار MVC)، یک وب سایت ماژولار طراحی کرده اید. یکی از این ماژول ها بخش فوتر(footer) وب سایت شماست.  فوتر ماژولی است که در تمامی صفحات وب سایت شما نمایش داده خواهد شد. معمولا در فوتر از اطلاعاتی استفاده می شود که باید از پایگاه داده خوانده شوند. سوالی که اینجا مطرح می شود، این است که آیا باید برای تمام صفحات، برای بخش فوتر یک Controller جدا نوشت؟ طبق یک قانون کلی در برنامه نویسی، هرگاه متوجه شدید که در حال کپی کردن یک قطعه کد برای بخش های مختلف هستید، بدانید روش غلطی را در پیش گرفته اید و یا حداقل روش بسیار بهتری نیز وجود دارد.
فریم ورک لاراول باز هم مثل سایر مواقع چاره اندیشی کرده است. inject@ پاسخ بهینه به سوال فوق است. کافی است شما در Viewی خود تکه کدی مانند تکه کد زیر را وارد کنید:

@inject('items','App\Mune')

<?php
    $footerMenu = $items::orderBy('created_at','desc')->whereFooter(1)->take(5)->get();
?>

حالا به توضیح کد فوق می پردازیم:

خط اول یا همان inject@، یک شی به نام items از مدل Menu موجود در فایل App می سازد. حتما دقت داشته باشید که شی معرفی شده به inject@ نباید علامت $ داشته باشد.

@inject('items','App\Mune')

اکنون در خط بعدی می توانیم با استفاده از شی ساخته شده هرگونه پردازش دلخواهی انجام دهیم. برای مثال در کد فوق، ما یک متغیر به نام footerMenu تعریف می کنیم و 5 مورد از آخرین آیتم هایی که ویژگی Footer آنها برابر با 1 است را باز می گرداند. این خط از کد، پردازشی است که شما در برنامه خود نیاز دارید و برای هرکسی متفاوت است.

<?php
    $footerMenu = $items::orderBy('created_at','desc')->whereFooter(1)->take(5)->get();
?>

بطور کلی استفاده از inject@ توصه نمی شود مگر در زمان هایی که مجبور به استفاده از آن هستید.
 

برچسب ها:
مقالات مشابه
ویدیوهای مشابه