Laravel маршрутизация с или без параметра в группе - PullRequest
1 голос
/ 08 апреля 2020

Для своего приложения я пытаюсь создать несколько записей маршрутов. Одна запись для инициализации приложения, а другая для AJAX запросов.

Поэтому мое приложение должно запускать функцию initialise, если я наберу https.test.com/app/drive, но также если я захочу в конце что-то ввести дополнительные параметры например: https:test.com/app/drive/specificTabA или https:test.com/app/drive/specificTabB

Проблема в том, что когда я набираю https.test.com/drive/specificTabNameA, это конфликтует с fetchData маршрутом получения, используемым моим вызовом AJAX.

Как я могу получить доступ к функции инициализации при нажатии на этот URl https.test.com/app/drive или также на что-то вроде этого: https:test.com/app/drive/specificTabA или https:test.com/app/drive/specificTabB?

Route::group(['prefix' => 'drive'], function () {
    Route::get('', 'CustomController@initialise');
    Route::get('fetchData', 'CustomController@fetchData');
});

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Я провел несколько тестов и пришел со следующим выводом / решением:

Route::group(['prefix' => 'drive'], function () {
    Route::get('fetchData', 'CustomController@fetchData');
    Route::get('{param?}', 'CustomController@initialise');
});

CustomerController:

function initialise($param = null) 
{
    ...
}

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

Когда вы посещаете /drive/fetchData, он загружает fetchData route

Когда вы посещаете /drive/, он загружает initialise маршрут без аргументов

Когда вы посещаете /drive/xyz, он загрузит initialise маршрут с $param, равным xyz

Надеюсь, это поможет:)

0 голосов
/ 08 апреля 2020

Следующее должно работать для вас:

Route::group(['prefix' => 'drive'], function () {
    Route::get('fetchData', 'CustomController@fetchData');

    Route::get('{path?}', 'CustomController@initialise')->where(['path' => '.*']);
});

Это позволит следующий путь:

/drive => initialise

/drive/1 = > initalize

/drive/1/2/3 => initalize

/drive/fetchData => fetchData

Добавление ->where(['path' => '.*']) направит любой путь к initalize Например, /1, /1/2, /1/2/3.

Если вы хотите, чтобы путь был только на один уровень глубиной, вы можете удалить где:

Route::get('{path?}', 'CustomController@initialise');
0 голосов
/ 08 апреля 2020

Мой друг, я хочу обратить ваше внимание на Laravel документы https://laravel.com/docs/5.0/routing#route -параметры особенно на этот параметр маршрута. Вы можете сказать маршрутизатору, что этот маршрут может иметь параметр, но также не может иметь его. Посмотрите на этот пример

Route::get('/{specific?}')

Теперь вы можете получить этот специфический c параметр в вашей функции контроллера после запроса

public function initialize (Request $request, $specific = null)

Установите для него значение по умолчанию, равное нулю, так как этот параметр может быть пропущен и нет, поэтому он должен иметь некоторое значение по умолчанию. Удачи;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...