casaparks/extract-routes

Casa-Parks 的 Laravel 路由提取器。

1.0.0 2017-03-15 20:53 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:09:06 UTC


README

Build Status Total Downloads Latest Stable Version License

简介

Extract Routes 是一个简单的路由列表提供工具,旨在为前端(例如:JavaScript)提供便利。

许可证

Extract Routes 是开源软件,遵循 MIT 许可证

安装

要开始使用 Extract Routes,请使用 Composer 将此包添加到项目的依赖中

composer require casa-parks/extract-routes

配置

安装后,在配置文件 config/app.php 中注册 CasaParks\ExtractRoutes\ExtractRoutesServiceProvider

'providers' => [
    // Other service providers...

    CasaParks\ExtractRoutes\ExtractRoutesServiceProvider::class,
],

基本用法

创建一个简单的视图生成器,如下所示

<?php

namespace App\Composers;

use CasaParks\ExtractRoutes\Service as RoutesExtractor;
use Illuminate\Contracts\View\View;

class RoutesComposer
{
    /**
     * The routes extractor.
     *
     * @var \CasaParks\ExtractRoutes\Service
     */
    protected $extractor;

    /**
     * Whether the data is cached or not.
     *
     * @var bool
     */
    protected $cached;

    /**
     * The view data.
     *
     * @var array
     */
    protected $data;

    /**
     * Creates a new routes composer.
     *
     * @param \CasaParks\ExtractRoutes\Service $extractor
     */
    public function __construct(RoutesExtractor $extractor)
    {
        $this->extractor = $extractor;
    }

    /**
     * Compose the view.
     *
     * @param \Illuminate\Contracts\View\View $view
     *
     * @return void
     */
    public function compose(View $view)
    {
        if (! $this->cached) {
            $this->cache();
        }

        $view->with($this->data);
    }

    /**
     * Cache the data.
     *
     * @return void
     */
    protected function cache()
    {
        $this->cached = true;

        // We don't want to include any admin / api routes.
        $routes = $this->extractor->filterOnly('middleware', 'guest', 'auth');

        $this->data = compact('routes');
    }
}

将此视图生成器添加到你的应用程序(或 composer)服务提供者的 boot 方法中

/**
 * Register any composers for your application.
 *
 * @return void
 */
public function boot()
{
    // ...

    // assuming `layout` is your common layout template.
    $this->app['view']->composer('layout', 'App\Composers\RoutesComposer');

    // ...
}

在你的通用 layout 模板文件中

<!-- ... -->
<head>
    <!-- ... -->

    <script>window.routes = {!! $routes->toJson() !!}</script>

    <!-- ... -->
</head>
<!-- ... -->

然后在你的 JavaScript 中按需使用。