zoukankan      html  css  js  c++  java
  • Laravel 视图

    版本:Laravel 7.13.0

    创建视图

    视图包含应用程序的 HTML,并且将控制器 / 应用程序的逻辑与显示分开,视图文件存放与 resources/views 目录下。

    创建一个简单的视图示例:

    <!-- 此视图文件位置 resources/views/greeting.blade.php -->
    
    <html>
        <body>
            <h1>Hello, {{ $name }}</h1>
        </body>
    </html>

    该视图文件位于 resources/views/greeting.blade.php, 可以使用全局辅助函数 view 将其返回:

    <!-- routes/web.php -->
    Route::get('/', function () {
        return view('greeting', ['name' => 'James']);
    });

    递给 view 辅助函数的第一个参数对应 resources/views 目录中视图文件的名称。第二个参数是应该可供视图使用的数据数组。在这种情况下,我们传递 name 变量,该变量将使用 Blade模版的语法在视图中显示。

    当然,视图文件也可以嵌套在 resources/views 目录的子目录中。「点」符号可以用来引用嵌套视图。例如,如果你的视图存储在 resources/views/admin/profile.blade.php,则可以这样引用它:

    return view('admin.profile', $data);

    注意:视图目录名中不应该包含 . 字符。

    判断视图文件是否存在

    如果需要判断视图文件是否存在,可以使用 View facade。如果存在,exists 方法会返回 true :

    // 一般写在控制器中
    use IlluminateSupportFacadesView;
    
    if (View::exists('emails.customer')) {
        //
    }

    创建第一个可用视图

    使用 first 方法,你可以创建存在于给定数组视图中的第一个视图。 如果你的应用程序或开发的第三方包允许定制或覆盖视图,这非常有用:

    return view()->first(['custom.admin', 'admin'], $data);

    当然,也可以通过 View facade 调用这个方法:

    use IlluminateSupportFacadesView;
    
    return View::first(['custom.admin', 'admin'], $data);

    向视图传递参数

    可以将一组数据传递给视图:

    return view('greetings', ['name' => 'Victoria']);

    以这种方式传递信息时,数据应该是具有键 / 值对的数组。在视图中,可以使用相应的键访问每个值,例如 。作为将完整的数据数组传递给 view 辅助函数的替代方法,您可以使用 with 方法将数据添加到视图中,同样是以键值对的形式调用,例如下面的代码将 name 和 age 这两个变量的数据传递到 Blade 中。

    return view('greeting')->with('name', 'Victoria');
    // 如果有多个数据
    return view('greeting')->with('name', 'Victoria')->with('age', 18);

    视图共享数据

    share 方法

    定义一个所有视图都可以访问到的变量。
    在服务提供器的 boot 方法中调用视图门面(Facade)的 share 方法。例如,可以将它们添加到 AppServiceProvider 或者为它们生成一个单独的服务提供器:

    <!-- app/Providers/AppServiceProvider.php -->
    // 在头部引入 View
    use IlluminateSupportFacadesView;
    
    // 修改 boot 方法
    public function boot()
    {
        View::share('val', 'value');
    }
     

    接下来任何视图文件都可以使用 {{ $val }} 获取到 “value” 这个值,实现数据在所有视图间的共享。

    视图合成器 composer 方法

    视图合成器是在呈现视图前调用的回调方法或类方法,如果需要在每次呈现视图前将数据绑定到视图(比如用户登陆信息、每个视图中展示的侧边栏或者导航元素),则视图合成器可以帮助您将该逻辑组织到一个位置。

    可以使用composer() 将逻辑组织到一个单独的地方。
    本例中,我们将在AppServiceProvider服务提供器中注册视图合成器,
    提供器代码如下:

    <?php
    namespace AppProviders;
    
    #use IlluminateSupportFacadesView;
    use IlluminateSupportServiceProvider;
    class AppServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            // 使用基于类方法
            // 第一个参数可以指定共享给那个视图,多个视图用数组,共享到全部视图可以用 *
            // 或者某个目录下所有视图 
            view()->composer(
                //'*', 'AppHttpViewComposersAuthComposer'
                //['extman.home, welcome'], 'AppHttpViewComposersAuthComposer'
                ['extman.*'], 'AppHttpViewComposersAuthComposer'
            );
    
            //使用基于回调函数
            view()->composer('*',function($view){
                $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
            });
        }
    
    }
     

    如果创建一个新的服务提供器来包含视图 composer 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中,下面假设注册的服务提供者类名为 ViewComposerServiceProvider

    注册一个服务提供者,路径 app/Providers/ViewComposerServiceProvider.php

    <?php
    namespace AppProviders;
    use IlluminateSupportFacadesView;
    use IlluminateSupportServiceProvider;
    class ViewComposerServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            View::composer(
                'pages/*', 'AppHttpViewComposersNavigationComposer'
            );
        }
        /**
         * 注册服务提供者
         *
         * @return void
         */
        public function register()
        {
            // TODO: 实现 register() 方法。
        }
    }

    添加该服务提供者到配置文件 config/app.php 的 providers 数组中

    <?php
    return [
      'providers' => [
            // ....
            /*
             * 应用的服务提供者...
             */
            AppProvidersAppServiceProvider::class,
            AppProvidersAuthServiceProvider::class,
            AppProvidersEventServiceProvider::class,
            AppProvidersRouteServiceProvider::class,
            AppProvidersViewComposerServiceProvider::class,
    
            // ....
        ],
    ];

    视图优化

    默认情况下,视图是按需编译的。当执行渲染视图的请求时,Laravel 将确定该视图的编译版本是否存在。如果已编译视图存在,Laravel 将比较未编译试图是否已被修改。如果已编译视图不存在,或者未编译视图已被修改,Laravel 将重新编译该视图。

    在请求期间编译视图会对性能产生影响,因此 Laravel 提供了 view:cache Artisan 命令来预编译应用中使用的所有视图文件。所以如果想提高网站性能,可以在部署过程中运行以下命令:

    php artisan view:cache

    view:clear 命令可以清除视图缓存:

    php artisan view:clear
  • 相关阅读:
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_15-页面静态化-模板管理-模板管理业务流程
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_14-页面静态化-数据模型-远程请求接口
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_13-页面静态化-数据模型-轮播图DataUrl接口
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_11-freemarker静态化测试-基于模板字符串静态化
    c语言,const被绕过
    c语言,结构体
    c语言,内存字节对齐
  • 原文地址:https://www.cnblogs.com/ryanzheng/p/13069654.html
Copyright © 2011-2022 走看看