Laravel检测移动/平板电脑并加载正确的视图

时间:2014-05-21 09:24:02

标签: laravel laravel-4

我已经阅读了如何为视图添加不同的路径或命名空间,但我认为这对我来说不是一个合适的解决方案。 我想要做的是为移动设备设置视图基本路径,为桌面设备设置不同的路径,因此在视图控制器中我不需要做任何更改。

在路径文件中设置路径并且不要触摸任何视图控制器会很棒。有什么想法吗?也许只是Config ::设置视图路径?

提前致谢! :)

3 个答案:

答案 0 :(得分:23)

对于未来正在寻找检测视图中设备的方法的Laravel 5用户;另一个选择是创建一个ServiceProvier - 然后使用View::share() - 这将使所有视图中的设备检测$agent可用。

安装Agent

composer require jenssegers/agent

创建服务提供商

php artisan make:provider AgentServiceProvider

在config / app.php

App\Providers\AgentServiceProvider::class,
app / providers / AgentServiceProvider.php 中的

<?php

namespace App\Providers;

use View;
use Jenssegers\Agent\Agent;
use Illuminate\Support\ServiceProvider;

class AgentServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $agent = new Agent();

        View::share('agent', $agent);
    }

    public function register()
    {
        //
    }
}

然后在你的意见中

@if ($agent->isMobile())

    Show mobile stuff...

@endif

答案 1 :(得分:8)

我在这里看同样的问题,基本上想要“插上”移动视图目录而不会弄乱我的控制器(如果可能的话)。

执行此操作的地方可能是app/config/views.php中的配置:

<?php

use Jenssegers\Agent\Agent as Agent;
$Agent = new Agent();
// agent detection influences the view storage path
if ($Agent->isMobile()) {
    // you're a mobile device
    $viewPath = __DIR__.'/../mobile';
} else {
    // you're a desktop device, or something similar
    $viewPath = __DIR__.'/../views';
}


return array(
    'paths' => array($viewPath),
    .....

似乎有效,为您提供了一个完全不同的目录。

我会继续尝试,因为桌面和移动设备之间可能会有一些重叠,但我们会看到。

PS:代理〜= Mobile_Detect

答案 2 :(得分:2)

您可以在视图文件夹中创建两个文件夹mobiledesktop。这两个文件夹包含相同的视图(仅文件名)。

├── views
|   ├── mobile
|   |   ├── main.blade.php
|   └── desktop
|       ├── main.blade.php

然后在您的控制器中,您可以使用文件夹名称在桌面和移动视图之间切换(或者如果您添加更多内容,则可以在任何其他视图之间切换)。

您只需要通过PHP解析请求的设备。您可以使用此项目执行此操作:http://mobiledetect.net/

现在您的控制器看起来像:

public function getIndex() {
    $detect = new Mobile_Detect;

    return View::make( ($detect->isMobile() ? 'mobile' : 'desktop') . '.your-view-name' );
}

($detect->isMobile() ? 'mobile' : 'desktop')重构为辅助/静态函数是一个好主意。或者将其注册为路由前过滤器中的配置项。