#php #laravel
Вопрос:
Вот как представлен мой маршрут Laravel
Route::match(['get', 'post'], 'add-edit-category/{id?}', 'CategoryControlller@addEditCategory')->name('Add/Edit Category');
Поэтому, если я получу идентификатор, контроллер вызовет функцию редактирования, иначе он создаст функцию.
Как выполнить ->name()
условие так, чтобы, если у меня есть переменная, я отправлял ->name('Add Category')
, а если нет ->name('Edit Category')
Попробовал погуглить, но, похоже, не смог найти пример для того же самого.
Комментарии:
1. ты этого не делаешь … вы создаете 2 разных маршрута для редактирования и создания и называете каждый по своему усмотрению … нет никаких причин для того, чтобы название «менялось» для одного маршрута
2. если вам все еще нужен единый маршрут, создайте общий маршрут с тем же именем и в методе контроллера проверьте, существует ли идентификатор в запросе или нет .если идентификатор существует, то его отредактируйте или создайте новый
Ответ №1:
Просто используйте 2 маршрута, один с идентификатором, а другой без него:
Route::match(['get', 'post'], 'add-edit-category', 'CategoryControlller@addEditCategory')->name('Add_Category');
Route::match(['get', 'post'], 'add-edit-category/{id}', 'CategoryControlller@addEditCategory')->name('Edit_Category');
Комментарии:
1. Просто для подтверждения, мы никак не сможем достичь этого в однолинейном праве. Как будто у них нет скрытого способа сделать это.
2. @HariharanThiagarajan может быть, есть способ, но это не чистое кодирование/безопасное кодирование и не рекомендуется!
3. @HariharanThiagarajan Вы можете сделать свой контроллер спокойным, а затем использовать
Route::resource(...)
, если хотите, чтобы он был однострочным.
Ответ №2:
Используйте для этой цели тернарный оператор:
Передать флаг из функции добавить контроллер категории в блейд:
$add_catrgory = true;
затем в blade вы можете проверить это следующим образом:
href= "{{$add_category == true ? route('Add_Category') : route('Edit_Category', $id ) }}"