I have a header in the app layouts with a profile link. When the user clicks it, he will be redirected to his profile. I managed to do something earlier on the ads displayed on the main page, but there I used route model binding like this inside a controller:
public function index(User $user){
$about = $user->profile()->get();
return view ('profile.index',[
'user' => $user,
'about' => $about
]);
And then the route:
Route::get('/index/{user}', [ProfileController::class, 'index'])->name('index');
If I've understood correctly, I should be using a view composer or repeat that code in many of my controllers. But do I leave the {user} in the route? And what Am I suppose to write in the composer?
public function compose(View $view)
{
$view->with('app', $about = $user->profile()->get());
}
And how will the link take the $about variable
<li><a href=" {{route('index', [$about]) }}">Profil</a></li>
Trying this returns an error, which is obvious because I'm still scratching my head to all of this
My Answer:
>about;_
_ return view('index', compact('about'));_
_}_
_For the profile link in the header, I want to display the user's profile information on the profile page. How can I achieve this using Laravel view composers?_
To achieve this using Laravel view composers, you can create a view composer that binds the user's profile information to the profile view. Here's how you can do it:
1. Create a view composer in your `AppServiceProvider` or create a new service provider for view composers. You can do this by running the following command:
bash
php artisan make:provider ComposerServiceProvider
2. In the `ComposerServiceProvider`, register the view composer in the `boot` method:
php
use Illuminate\Support\Facades\View;
public function boot()
{
View::composer('profile', function ($view) {
$user = auth()->user();
$about = $user->about;
$view->with('about', $about);
});
}
3. Register the `ComposerServiceProvider` in the `providers` array in your `config/app.php` file.
4. In your profile view, you can access the `$about` variable directly without passing it from the controller:
html
{{ $about }}
Now, whenever the profile view is rendered, the view composer will automatically bind the user's profile information to the view.
Rate this post
5 of 5 based on 6622 votesComments