Maison > cadre php > Laravel > le corps du texte

Comment partager des données entre vues dans le framework laravel5.5 ? Deux façons de partager des données entre vues (avec code)

不言
Libérer: 2018-08-02 14:11:39
original
3411 Les gens l'ont consulté

laravelIl existe deux façons de partager des données entre les vues dans le framework. L'une est implémentée à l'aide de la méthode view façade share() et l'autre est implémentée à l'aide de la méthode view façade composer(). , il existe deux méthodes. Quelle est exactement la mise en œuvre de ? Jetons un coup d'œil au contenu du prochain article.

Tout d'abord, une chose à noter est  : la façade View est utilisée pour accéder à l'implémentation sous-jacente d'IlluminateContractsViewFactory

View Façade share()Méthode

Parfois, vous devez partager des fragments de données entre toutes les vues. Dans ce cas, vous pouvez utiliser la méthode de partage de la vue façade.

1. Généralement, je vais créer un contrôleur de base BaseController.php sous apphttpControllersxx

<?php
namespace App\Http\Controllers\ExtMan;

use Illuminate\Routing\Controller;

class BaseController extends Controller
{
    public function __construct(\Auth $auth)
    {
        $this->initViewShare();    //视图共享数据
    }
    /**
     *  视图共享数据方法
     */
    public function initViewShare()
    {
        view()->share('action_name',get_action_name()); //当前URL的方法器名
     }
}


//视图使用 
//共享视图一般都是在layout中
{{ $action_name }}
Copier après la connexion

get_action_name() est une fonction personnalisée.

conseils :
Créez appHelpersExtmanFun.php et introduisez le chargement automatique dans composer.json

 "files":[
     "app/Helpers/ExtmanFun.php"
 ]
Copier après la connexion

Exécutez composer dump-autoload et il se chargera automatiquement

2. Appelez la méthode share()

<?php
namespace App\Providers;
use View;
class AppServiceProvider extends ServiceProvider
{
    /**
     * 启动所有应用服务
     *
     * @return void
     */
    public function boot()
    {
        View::share(&#39;key&#39;, &#39;value&#39;);
        //也可使用
        view()->share(&#39;name&#39;,&#39;共享数据片段&#39;);
    }
}
Copier après la connexion

viewfacade composer()< dans la méthode de démarrage du fournisseur de services AppServiceProvider (ou créez un nouveau fournisseur) 🎜>

Le compositeur de vue est une fonction de rappel ou une méthode de classe lorsque la vue est rendue si vous devez lier les données de la vue à chaque fois que vous restituez la vue, telles que les informations de connexion de l'utilisateur. Vous pouvez utiliser composer() pour organiser la logique dans un endroit séparé.

Dans cet exemple, nous enregistrerons le compositeur de vue dans le fournisseur de services AppServiceProvider.
Le code du fournisseur est le suivant :

<?php
namespace App\Providers;

#use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // 使用基于类方法
        // 第一个参数可以指定共享给那个视图,多个视图用数组,共享到全部视图可以用 *
        // 或者某个目录下所有视图 
        view()->composer(
            //&#39;*&#39;, &#39;App\Http\ViewComposers\AuthComposer&#39;
            //[&#39;extman.home, welcome&#39;], &#39;App\Http\ViewComposers\AuthComposer&#39;
            [&#39;extman.*&#39;], &#39;App\Http\ViewComposers\AuthComposer&#39;
        );

        //使用基于回调函数
        view()->composer(&#39;*&#39;,function($view){
            $view->with(&#39;user&#39;,array(&#39;name&#39;=>&#39;test&#39;,&#39;avatar&#39;=>&#39;/path/to/test.jpg&#39;));
        });
    }
other code
}
Copier après la connexion
Si vous créez un nouveau fournisseur de services pour inclure le compositeur de vue. inscription, vous devez ajouter le fournisseur de services au tableau fournisseurs du fichier de configuration config/app.php

À ce stade, le compositeur de vue a été enregistré et la méthode AuthComposer@compose sera exécutée à chaque fois toutes les vues du répertoire extman sont rendues.

Définissez la classe de compositeur de vue AppHttpViewComposersAuthComposer.php

<?php
namespace App\Http\ViewComposers;

use Illuminate\View\View;
use Illuminate\Repositories\UserRepository;

class AuthComposer
{
    protected $users;

    public function __construct(UserRepository $users)
    {
        // 依赖注入通过服务容器自动解析...
        $this->users = $users;
    }

    //绑定数据到视图
    public function compose(View $view)
    {
        $user_info = \Auth::user();
        $view->with(&#39;motto&#39;, $user_info);
        $view->with(&#39;count&#39;, $this->users->count());
    }
}
Copier après la connexion
Avant le rendu de la vue, la méthode compose de la classe AuthComposer est appelée et l'instance IlluminateViewView est injectée dans la méthode, afin qu'elle puisse être lié en utilisant sa méthode with Data to view.

Tous les compositeurs de vues seront résolus via le conteneur de service, vous pouvez donc taper des indices sur les dépendances qui doivent être injectées dans le constructeur du compositeur de vues.

Articles connexes recommandés :

Explication détaillée des données partagées entre les vues Laravel et la vue instance Composer_php

Apprentissage du framework Laravel 5 direction Afficher les transferts de données, framework laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!