เป้าหมายนี้สามารถบรรลุได้ด้วยวิธีการต่างๆ
1. การใช้ BaseController
วิธีที่ฉันชอบจัดเตรียมสิ่งต่างๆฉันสร้างBaseController
ชั้นเรียนที่ขยายขอบเขตของ Laravel Controller
และตั้งค่าสิ่งต่างๆทั่วโลกที่นั่น ตัวควบคุมอื่น ๆ ทั้งหมดจะขยายจากBaseController
คอนโทรลเลอร์ของ Laravel แทน
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. การใช้ตัวกรอง
หากคุณทราบข้อเท็จจริงว่าคุณต้องการตั้งค่าบางสิ่งสำหรับการดูในทุกคำขอตลอดทั้งแอปพลิเคชันคุณสามารถทำได้โดยใช้ตัวกรองที่ทำงานก่อนคำขอ - นี่คือวิธีที่ฉันจัดการกับวัตถุ User ใน Laravel
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
หรือ
คุณสามารถกำหนดตัวกรองของคุณเอง
Route::filter('user-filter', function() {
View::share('user', User::all());
});
และเรียกมันผ่านการเรียกตัวกรองง่ายๆ
อัปเดตตามเวอร์ชัน 5. *
3. การใช้มิดเดิลแวร์
ใช้View::share
กับmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. การใช้ View Composer
View Composer ยังช่วยผูกข้อมูลเฉพาะเพื่อดูในรูปแบบต่างๆ คุณสามารถเชื่อมโยงตัวแปรกับมุมมองเฉพาะหรือมุมมองทั้งหมดได้โดยตรง ตัวอย่างเช่นคุณสามารถสร้างไดเร็กทอรีของคุณเองเพื่อจัดเก็บไฟล์ view composer ตามความต้องการ และไฟล์ผู้แต่งมุมมองเหล่านี้ผ่านบริการให้โต้ตอบกับมุมมอง
วิธีการดูผู้แต่งสามารถใช้วิธีที่แตกต่างกันตัวอย่างแรกอาจมีลักษณะเหมือนกัน:
คุณสามารถสร้างApp\Http\ViewComposers
ไดเร็กทอรี
ผู้ให้บริการ
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
หลังจากนั้นให้เพิ่มผู้ให้บริการนี้ใน config / app.php ในส่วน "ผู้ให้บริการ"
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
วิธีนี้สามารถช่วยเฉพาะ View ที่เจาะจงเท่านั้น แต่ถ้าคุณต้องการทริกเกอร์ ViewComposer กับมุมมองทั้งหมดเราต้องใช้การเปลี่ยนแปลงเดียวนี้กับ ServiceProvider
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
การอ้างอิง
เอกสาร Laravel
สำหรับการชี้แจงเพิ่มเติมตอน Laracast
หากยังมีบางอย่างไม่ชัดเจนจากด้านข้างของฉันโปรดแจ้งให้เราทราบ