Step 01: Creating view composer file in App\View\Composers directory with name MetaComposer.php
namespace App\View\Composers;
use App\Models\Post; use Illuminate\View\View; class MetaComposer { public function compose(View $view) { preg_match('/([a-z]*)@/i', request()->route()->getActionName(), $controller); // getting current requested controller name preg_match('/@([a-z]*)/i', request()->route()->getActionName(), $action); // getting current requested action name if( ($controller[1] == 'CommunityController') ) { switch ($action[1]) { case "index": $metaTitle = 'Index page'; break; case "create": $metaTitle = 'Create page'; break; case "show": $metaTitle = 'Show page'; break; case "edit": $metaTitle = 'Edit page'; break; default: $metaTitle = ''; } } if( isset( $metaTitle ) ) { $view->with('metaTitle', $metaTitle); } } }
Above we need to pass the data to view using $view->with('key','value') this format.
Step 02: Registering view composer to a in AppServiceProvider.php in boot() method for layout file located in layouts/app.blade.php
public function boot() { View::composer('layouts.app', MetaComposer::class); }
Step 03: Using Passed vew data metaTitle in layouts/app.blade.php
<title>{!! !empty($metaTitle) ? $metaTitle.' -' : '' !!} title>