Detailed explanation of shared data and view Composer_php examples between Laravel views

WBOY
Release: 2016-08-17 13:02:37
Original
1231 people have browsed it

1. Share data between views

In addition to passing specified data in a single view, sometimes the same data needs to be passed in all views, that is, we need to share data in different views. To achieve this, you need to use the share method of the view factory.

Global helper functionview is similar to response. If parameters are passed in, an IlluminateViewView instance will be returned. If no parameters are passed in, an IlluminateViewFactory instance will be returned. So we can share data between views by using the following method in the boot method of the service provider:

<&#63;php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}
Copy after login

We define two routes in routes.php:

Route::get('testViewHello',function(){
  return view('hello');
});

Route::get('testViewHome',function(){
  return view('home');
});
Copy after login

Then create a home.blade.phpview file in the resources/views directory with the following content:

{{$sitename}}首页
Copy after login

Create another hello.blade.phpview file:

欢迎来到{{$sitename}}!
Copy after login

Access http://laravel.app:8000/testViewHello and http://laravel.app:8000/testViewHome respectively in the browser, you can parse the value of $sitename.

2. View Composer

Sometimes we want to bind some specific data to the view every time the view is rendered, such as logged in user information. In this case, we need to use view Composer. View Composer is implemented through the composer method of the view factory. The second callback parameter of this method supports two methods based on controller actions and closure functions.

For the sake of simplicity, we are still based on AppServiceProvider instead of creating a separate service provider. Here we pass closure parameters (refer to the view document for controller actions):

<&#63;php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');

    //视图Composer
    view()->composer('hello',function($view){
      $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
    });
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}
Copy after login

Modify hello.blade.phpView file:

Welcome to {{$sitename}}!

<h3>用户信息</h3>
用户名:{{$user['name']}}<br>
用户头像:{{$user['avatar']}}
Copy after login

Visit http://laravel.app:8000/testViewHello in the browser, the output content is as follows:

欢迎来到Laravel学院!

用户信息

用户名:test
用户头像:/path/to/test.jpg
Copy after login

You can also pass data to multiple views:

view()->composer(['hello','home'],function($view){
  $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
});
Copy after login

Even all views (use wildcard *):

view()->composer('*',function($view){
  $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
});
Copy after login

The above are the details of sharing data between Laravel views and view Composer. I hope this article will be helpful to everyone learning Laravel.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template