Laravel 5.4 官方文档摘记:View类

视图

调用视图

调用视图只需要view()方法就可以了,该方法的第一个参数是所要调用的视图,第二个参数则是传入该视图的参数:

Route::get('users/{name}',function($name){
    return view('viewName',['name'=>$name]);
});

判断视图是否存在

直接使用函数exists()

if(view()->exists('viewName')){
    //code...
}

视图间传递数据

视图间传递数据可以使用函数share()

view()->share('key','value');

注意上面不是数组形式!!!

视图结构

默认的视图文件是放在resource/views目录下的,但是如果你想嵌套更深一层的目录,那么可以在调用视图时使用.表示目录结构:

如你的视图文件是resource/views/admin/show.blade.php文件,那么你在调用视图的时候就要这么写,这里拿在路由中设置调用视图为例:

Route::get('user/',function(){
    return view('admin.show');
});

定义视图统一处理函数

想为某一视图创建一个全局有效的处理函数,就需要为该视图注册一个服务提供者。所以接下来会先介绍服务提供者相关信息,再来是如何在该服务提供者中视图处理函数。

服务提供者

创建服务提供者文件

所有的服务提供者文件都被保存在app\Providers下,所有的服务提供者都继承自Illuminate\Support\ServiceProvider类,且都会自动调用其中的boot()方法。所以你先创建一个自定义的服务提供者文件,这里就拿文档上的ComposerServiceProvider为例,创建该文件,namespace App\Providers;

注册新建的服务提供者文件

所有的服务提供者文件都被配置在config/app.php中,具体代码可以看下面:

/*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => [
        //这里随便举一个例子
        Illuminate\Auth\AuthServiceProvider::class,
    ]

所以这里把我们新建的服务提供者加入进配置文件中。

到此为止,自建的服务提供者就能运行了,当Laravel开始运行之后,我们自建的服务提供者中的boot()方法就会自动调用。

接下来就是如何使这个新建的服务提供者和我们的视图扯上关系了。

视图view类

这里我的能力暂时解决不了,但是先看文档上写在服务提供者的boot()方法中。

public function boot()
    {
        // 使用基于类的composers...
        View::composer(
            'profile', 'App\Http\ViewComposers\ProfileComposer'
        );

        // 使用基于闭包的composers...
        View::composer('dashboard', function ($view) {});
    }

看这段代码的时候我是没有弄懂他到底干了啥,于是接下来的内容纯属我猜测的。

首先来看View::composer,我看过View类的源码了,如下:

<?php

namespace Illuminate\Support\Facades;

/**
 * @see \Illuminate\View\Factory
 */
class View extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'view';
    }
}

根本就没有composer类的静态方法,于是我就去看他继承的父类Facade,但是发现这里面的内容已经超越我现有的知识水平了。结合我们所需要调用的类:'App\Http\ViewComposers\ProfileComposer'的源码:

<?php

namespace App\Http\ViewComposers;

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

class ProfileComposer
{
    protected $users;
    //这里的UserRepository类不是重点,只是为了表示能在其中传入任何参数
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

我们发现其中也有一个composer方法,来处理业务逻辑。所以接下来就是我的猜测了:

  1. View类中根本没有composer这个方法
  2. 在服务提供者中设置的View::composer( 'profile','App\Http\ViewComposers\ProfileComposer' );表示调用App\Http\ViewComposers\ProfileComposer中的composer方法来进行处理
  3. profile表示的是将Illuminate\View\View类的一个实例profile传入该方法中作为参数

既然都说是猜了,那就很有可能是错误的,迟一点研究一下Facade类的原理,再来详细解释这个,这里,就当给自己立个Flag吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值