laravel不同设备使用不同的视图

Auth:admin Date:2016-05-28 17:40:00 Cat:技术笔记


使用composer添加第三方库 jenssegers/agent

composer require jenssegers/agent
然后在app/config/app.php 里的服务提供者数组里添加该库, 并添加别名

'providers' => [
     Jenssegers\Agent\AgentServiceProvider::class,
]

'aliases' => [
     'Agent'    => Jenssegers\Agent\Facades\Agent::class,    
]

使用artisan创建一个服务提供者类
php artisan make:provider ResponseMacroServiceProvider

同样要在app.php里面配置

'providers' => [
     App\Providers\ResponseMacroServiceProvider::class,    
]
// 别名用不到,不用配置了

修改app/Providers/ResponseMacroServiceProvider.phpboot方法

public function boot(ResponseFactory $factory)
{
    $factory->macro('ress', function ($viewname) use ($factory) {
        if ( Agent::isMobile() ) {
            return view()->make($viewname . "_mobile");
        } else {
            return view()->make($viewname . "_web");
        }
    });
}

在Controller中可以这样使用

class HomeController extends Controller
{
    public function index()
    {
        return response()->ress('home.index');
        //return view('home.index');
    }

    public function article()
    {
        return response()->ress('home.article');
    }
}

最后就是把视图名改为 _web.blade.php 和 _mobile.blade.php

标签: