Экспорт маршрутов из Laravel в JSON файл

В статье разберем как экспортировать маршруты из Laravel в файл json для последующего использования в JS-приложении на Vue или React.

Решение заключается в том, чтобы после запуска команды php artisan route:json формировался json-файл со всеми маршрутами вашего Laravel приложения.

Вот такой результат мы ожидаем увидеть в файле routes.json:

{
  "user.create": "user\/create",
  "user.index": "user",
  "user.store": "user",
  "user.show": "user\/{id}",
  "user.edit": "user\/{id}\/edit",
  "user.update": "user\/{id}",
  "user.destroy": "user\/{id}",
  "home": "home"
  // ...
}

Пошаговое руководство

Код взят из видео Front-end в фреймворке Laravel: как передать маршруты в скрипты JS

Введите команду php artisan make:command GenerateRoutesJson

В директории app/Console/Commands создался файл. Скопируйте в него нижеследующий код:

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Routing\Router;

class GenerateRoutesJson extends Command
{
  /**
   * The name and signature of the console command.
   *
   * @var string
   */
  protected $signature = 'route:json';

  protected $json_file_path = 'resources/js/routes.json';
  
  protected $router;

  /**
   * The console command description.
   *
   * @var string
   */
  protected $description = 'Export Laravel routes to JSON file';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct(Router $router)
  {
    parent::__construct();
    
    $this->router = $router;
  }

  /**
   * Execute the console command.
   *
   * @return int
   */
  public function handle()
  {
    $routes = [];

    foreach($this->router->getRoutes() as $route){
      $routes[$route->getName()] = $route->uri();
    }

    File::put($this->json_file_path, json_encode($routes, JSON_PRETTY_PRINT));
    echo "Routes exported to ".$this->json_file_path;
  }
}

Создаем функцию для выборки маршрута в JS-пришложении

Создаем файл resources/js/route.js и копируем туда код:

var routes = require('./routes.json');

export default function(){
  var args = Array.prototype.slice.call(arguments); // arguments - аргументы, переданные в функцию
  var name = args.shift();
  if(routes[name] === undefined){
    console.log('Error: route "'+name+'" dosn't exist');
  }else{
    return '/' +
      routes[name]
      .split('/')
      .map(function(str){
        if(str[0] == '{'){
          return args.shift();
        }else{
          return str;
        }
      })
      .join('/');
  }
}

Проверяем работу кода

В вашем app.js добавляем строчки:

import routes from './route';
console.log(routes('ROUTE_NAME')); // Маршрут без параметров
console.log(routes('ROUTE_NAME', [5]));  // Маршрут с параметрами, например /user/{id}/edit

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Пример перевода с помощью Yandex Translate API

Загрузка изображения в Laravel

Русификация Laravel

Универсальная форма обратной связи — feedBackForm

Добавить поле к существующей таблице Laravel

Как поменять версию PHP, используемую в командной строке на Windows

Как контролировать кэш CSS и скриптов

Как поменять язык в Faker

Транслитерация URL в Laravel. Примеры str_slug()

Простое логирование

Разработка бота Telegram с помощью Botman на локальном компьютере

Курсы валют с cbr.ru на PHP

Разные фишки, заготовки

Валидация данных в Laravel form request

Laravel Excel - Базовый экспорт

Получить вложенный массив из плоского

Добавить в botman editMessageText для Telegram

Namespace на примерах - Как понять пространства имен в PHP

Заготовки для автоматического заполнения товарами магазина 1.5.5.1.2

Как сделать middleware в Laravel 6 - простой пример

Laravel: Отношения моделей многие ко многим - belongsToMany

Как обработать POST данные в PHP

Примеры работы с API

Laravel: Отношения моделей один ко многим - hasMany, belongsTo

Как русифицировать или поменять шаблон уведомления о сбросе пароля в Laravel

Создать ссылку на storage из внешнего каталога для Laravel

Установить Laravel в отдельную папку (site.ru/laravel/)

Загрузить файл для постобработки

Получить время выполнения PHP скрипта. Решение в 3 строки кода

Валидация номера кредитной карты на PHP (Laravel)

Создание form request в Laravel: руководство для начинающих

Получить курсы валют с cbr.ru на PHP с кэшированием результатов

Связать папку storage с папкой public в Laravel

Экспорт маршрутов из Laravel в JSON файл

Откуда в Laravel Jetstream (inertia) prop auth.user?

Фиксированная сортировка массива на основе хэша

Обработка ошибок в Laravel form request

Постраничная навигация на Bootstrap в Laravel 8

Вывести список всех файлов на сервере (и размер файла)

Blade - расширить @section с использованием директивы @parent

Добавить данные об авторизации при каждом запросе к API в Laravel

Работа с файлами в Laravel Form Request

Работа с вложенными объектами и коллекциями в Laravel form request

Laravel: Отношение через таблицу-посредника - hasOneThrough()

Стандартные свойства модели в Laravel

Laravel: Отношения моделей один к одному - hasOne, belongsTo

Laravel: Отношение через таблицу-посредника - hasManyThrough()

Авторизацией и аутентификация в Laravel form request

Создание уникального индекса в миграции Laravel

Установка Laravel и создание нового проекта

Laravel form request для создания API-запросов

Настройка команды CRON на хостинге nic.ru для активации Laravel schedule

HTTP-запросы в Laravel form request - работа с различными типами запросов

Создание класса модели в Laravel

Создание таблицы в базе данных (миграции) для модели в Laravel

Как создать модель в Laravel

Базовые методы CRUD контроллера для модели в Laravel

Наш сайт использует куки, нажмите «ОК» если вы не против
OK