В моем веб-файле есть маршрут, который принимает $id в качестве значения для передачи функции в моем PagesController. Однако я хочу, чтобы функция по-прежнему выполнялась и отображала предполагаемую форму, даже если $id не передается функции.
файл web.php
Route::get('/request/{id}', 'PagesController@makeRequest');
Файл PagesController.php
public function makeRequest($id)
{
if (!empty($id)){
$target = Partner::find($id);
}
return view('pages.makeRequest')->with('target', $target);
}
makeRequest.blade.php
<input type = "text" class = "form-control" value = "{{$target->inst_name}}" required disabled>
Я хочу, чтобы на странице отображались сведения из базы данных с идентификатором $, если он указан, или были пустые места, если идентификатор $ не указан.






Как указано в документации Laravel: используйте Дополнительные параметры следующим образом:
Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter
Контроллер
public function makeRequest($id = null)
{
if (!empty($id)){
$target = User::find($id);
return view('pages.makeRequest')->with('target', $target);
} else {
return view('pageslist'); ///set default list..
}
}
Спасибо за ваш ответ. Я только что попробовал и получил ошибку. ``` Слишком мало аргументов для функции App\Http\Controllers\PagesController::makeRequest(), передано 0 и ровно 1 ожидается ```
вы передали идентификатор в своем URL-адресе?
Я хочу, чтобы он работал как для экземпляров, т.е. переменная прошла или нет.
Для необязательного идентификатора передачи параметра с ? в маршруте и укажите $id = null в параметре вашей функции следующим образом:
Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter
makeRequest($id = null) {
// Code here...
...
}
в вашем файле маршрутов (web.php, как указано в вашем вопросе)
Route::get('/request/{id?}', 'PagesController@makeRequest');
и в вашем контроллере PagesController.php
public function makeRequest($id = null)
{
}
Чтобы узнать больше об этом, просто прочитайте https://laravel.com/docs/5.7/routing#параметры-необязательные параметры
Вы можете использовать параметр по желанию:
Route::get('/request/{id?}', 'PagesController@makeRequest');
Теперь, поскольку параметр является необязательным, при определении функции контроллера вам необходимо присвоить значение по умолчанию null в объявлении аргумента.
<?php
public function makeRequest($id = null)
{
if ($id){
$target = Partner::findOrFail($id);
return view('pages.makeRequest')->with(compact('target'));
}
// Return different view when id is not present
// Maybe all targets if you want
$targets = Partner::select('column1', 'column2')->get();
return view('pages.all')->with('targets');
}
Я использую findOrFail вместо find. Это очень удобная функция Laravel, которая автоматически генерирует исключение ModelNotFound, а для внешнего пользователя выдает простую страницу 404.
Поэтому, если кто-то обращается к www.url.com/request/2, это действительный идентификатор, тогда он покажет действительную страницу с данными. Если получен доступ к URL-адресу www.url.com/request/blahblah, он выдаст 404. Это позволяет избежать усилий по обработке этого вручную.
Все ваши решения были полезны. Главное заключалось в том, что когда я вызывал только представление, не передавая $target в представление, страница выдавала ошибку. Вот что я сделал.
Route::get('/request/{id?}', 'PagesController@makeRequest');
Затем в контроллере
public function makeRequest(Request $request, $id=null)
{
if ($id != null) {
$target = Partner::find($id);
return view('pages.makeRequest')->with('target', $target);
}
return view('pages.makeNullRequest');
}
Если вы не поняли, что произошло, я создал новое представление, в котором было это вместо того, что я разместил в вопросе.
<input type = "text" class = "form-control" value = "" required readonly>
Извините, я не обновил вас, ребята, вовремя. Я думаю, что ближе всего к решению этой проблемы мне подошел Джиннеш Джойсар. очень ценю всех вас, ребята. ты просто потрясающий
Вот как я это сделал:
Route::get('index', 'SeasonController@index');
// контроллер
public function index(Request $request )
{
$id= $request->query('id');
}
Как вы это называете:
localhost/api/index?id=7
Для меня ответ был в том порядке, в котором я перечислил маршруты в файле маршрутов.
Файл маршрутов вызовет первый, соответствующий шаблону.
Route::get('/ohmy/{id?}', 'OhMyController@show');
Route::get('/ohmy/all', 'OhMyController@all'); //never gets called
Вместо этого поместите необязательные параметры в конец списка:
Route::get('/ohmy/all', 'OhMyController@all');
Route::get('/ohmy/{id?}', 'OhMyController@show');
Поможет ли laravel.com/docs/5.7/routing#параметры-необязательные параметры? (И не забудьте сделать параметр метода необязательным/назначить его по умолчанию)