Arhn - архитектура программирования

переопределить автоматически обнаруженные маршруты пакетов laravel 5.7

У меня не получается разрешить пользователям переопределять маршруты моих пакетов. Поскольку пакет обнаруживается автоматически, я не могу выполнить обычное исправление для этого.

Желаемый результат: если в routes-> web.php пользователь определяет маршрут '/ home', а в файле routes.php моего пакета у меня также есть '/ home', используется версия web.php.

Дайте мне знать, какой еще код мне нужно посмотреть, чтобы решить эту проблему!

Поставщик услуг пакета:

no longer relevant

Решение:

Чтобы решить эту проблему так, как я задумал (без нарушения автообнаружения), вам нужно будет проверить другие маршруты в маршруте, который обычно переопределяет пользовательские маршруты. Например, эта функция, которая имеет маршрут '/ {slug}', обычно нарушает пользовательские маршруты web.php, такие как '/ userroute'.

Мой обходной путь выглядит так.

public function page($slug){
    $route = $slug;
    $routes = Route::getRoutes();
    foreach($routes as $r){
      if($r->uri() == $route){
        $name = $r->getActionName();
        if(isset($name)){
          return \App::call('\\'.$name);
        }
      }
    }
    //add route code after

Нам нужно вызвать маршрут напрямую, чтобы предотвратить бесконечное перенаправление. Это хорошо работает для меня, потому что я могу контролировать, какие маршруты пакетов пользователь может переопределить в своем файле web.php, однако я уверен, что должен быть более быстрый способ добиться всего этого.

11.09.2018

  • Я исправил это, создав маршрут перехвата всех и ища любые другие маршруты с совпадающими именами. 18.09.2018
  • Не могли бы вы обновить свой вопрос кодом обходного пути? У меня точно такая же проблема. Лучшее решение, которое у меня есть, - это использовать функцию dont-discover и научить других разработчиков вручную добавлять моего поставщика услуг ПОСЛЕ App\Providers\RouteServiceProvider. Спасибо. 14.01.2019
  • Вопрос обновлен! Я надеюсь, что это поможет. 22.01.2019

Ответы:


1

Вы можете добавить узел не обнаруживать в файл composer.json, чтобы исключить пакеты из автоматического обнаружения.

"extra": {
  "laravel": {
    "providers": [
      "WindfallInc\\Woodpecker\\WoodpeckerServiceProvider"
    ],
    "dont-discover": [
        "windfallinc/woodpecker"
    ]
  }
}

Тейлор говорил об этой функции на Medium, когда добавлял автоматическое обнаружение на Medium. https://medium.com/@taylorotwell/package-auto-discovery-in-laravel-5-5-ea9e3ab20518

12.09.2018
  • Тем не менее, я ищу способ переопределить, не удаляя функциональность «подключи и работай», которую дает обнаружение пакетов. Если вы установите параметр «Не обнаруживать», пользователю потребуется вручную добавить поставщика услуг. Что может привести к той же проблеме, если пользователь поместит его не в то место. 12.09.2018
  • Я думаю, что вы, как создатель пакета, не должны использовать dont-discover, но люди, устанавливающие ваш пакет, должны использовать dont-discover в основном composer.json своего проекта: stackoverflow.com/questions/50219976/ 15.03.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..