У меня есть форма, которая передает данные в базу данных. И он отправляет данные в базу данных. Но Laravel дает ошибку, когда пытается перенаправить ее на другой метод в том же контроллере.
ReflectionException in RouteDependencyResolverTrait.php line 57: Internal error: Failed to retrieve the default value
Вот контроллер, который я использую. Пожалуйста, проверьте способ public function store(Request $request)
.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Inbox; class ContactUsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('pages.contactus'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // validate the data // store the data in the database // redirect to another page $this->validate($request, [ 'name' => 'required|max:255', 'email' => 'required', 'telephone' => 'required', 'message' => 'required', ]); $inbox = new Inbox; $inbox->name = $request->name; $inbox->email = $request->email; $inbox->telephone = $request->telephone; $inbox->message = $request->message; $inbox->isnew = 1; $inbox->category = $request->category; $inbox->save(); // redirects to the route //return redirect()->route('contactus.show', $inbox->id); return redirect()->action( 'ContactUsController@show', ['id' => 11] ); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { print_r($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
И я попытался использовать оба метода в двух разных случаях. Но Laravel показывает ту же ошибку каждый раз.
return redirect()->route('contactus.show', $inbox->id); return redirect()->action( 'ContactUsController@show', ['id' => 11] );
И вот файл маршрута web.php
.
Route::get('contactus', 'ContactUsController@create'); Route::get('contactus/show', 'ContactUsController@show'); Route::post('contactus/store', 'ContactUsController@store');
Я понятия не имею, из-за этой проблемы. Любое предложение будет полезно.
Благодаря!
Вы передаете значение id
маршрутизатору при переадресации, но вы не указываете маршрутизатору использовать это значение в маршруте. Поэтому маршрутизатор не знает, чтобы передать значение id
в метод show
.
Измените маршрут таким образом:
Route::get('contactus/{id}', 'ContactUsController@show');
Тогда ваше перенаправление должно работать, и вам следует перенаправить его (используя идентификатор из вашего примера) /contactus/11
.
У вас нет $id
определенного на маршруте. Вы можете добавить это к маршруту с помощью:
Route::get('contactus/show/{id}', 'ContactUsController@show');
ИЛИ
Вы можете передать его как параметр get и получить его в запросе:
public function show(Request $request) { print_r($request->input('id')); }
У меня была такая же ошибка, и это было потому, что там был параметр $request
вместо Request $request