Laravel route() 函数没有将正确的类型传递给控制器
Laravel route() function doesn't pass the right type to the controller
blade代码:
<td><a href="{{ route('employee.show', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}">{{ $employee->first_name }} {{ $employee->last_name }}</a></td>
<td><a href="{{ route('employee.update', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}" class="btn btn-primary">{{ __('app-text.indexEdit') }}</a></td>
<td><form action="{{ route('employee.delete', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}" method="post">
控制器功能:
public function edit(Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
错误:
TypeError
Argument 1 passed to App\Http\Controllers\EmployeesController::edit() must be an instance of App\Employee, string given
http://localhost:8000/fr/employee/edit/1
路线:
Route::group(['prefix' => '{lang}'], function() {
Route::prefix('employee')->name('employee.')->group(function() {
Route::get('/edit/{employee}', 'EmployeesController@edit')->name('edit');
Route::patch('/edit/{employee}', 'EmployeesController@update')->name('update');
我正在尝试使应用程序成为 multi-language 应用程序,因此在我添加 lang 变量之后,路由不会传递 $employee->id 变量。我应该为 lang 变量添加一个可传递给我的控制器的变量吗?
任何解决方案?非常感谢。
你的参数有误。正如堆栈跟踪所说,控制器方法需要一个 Employee
模型的实例,但您传入的是一个字符串
改变
public function edit(Employee $employee)
到
public function edit(Request $request, $employeeId) // you can remove $request if you dont intend to perform redirects
所以最后你的代码看起来像
public function edit(Request $request, $employeeId)
{
$employee = Employee::find($employeeId);
$companies = Company::all(); // use all instead of get if you arent going to perform selections.
return view('employee.edit', compact('employee', 'companies'));
}
注意:您可能需要根据提供的$employeeId
处理找不到员工的情况
我认为你必须像这样修改你的路线
在web.php
Route::get('your-route/{lang}/{id}','YourController@edit');
在您的控制器中
public function edit($lang,Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
如果您在路线中也经过 locale
那么它应该如下所示:
web.php
Route::get('your-Own-route/{lang}/{employee}','YourController@edit');
控制器编辑方法
public function edit($lang,Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
首先你可以创建一个路由来更改语言
Route:: get('lang/{lang}', function ($locale) {
session(['locale' => $locale]);
return \Redirect::back();
})
第 2 步:中间件
public function handle($request, Closure $next)
{
App::setLocale(session('locale'));
return $next($request);
}
可以组群后
Route::group(['middleware' => 'language'],function(){
//routes with u want change language
Route::get('/edit/{employee}', 'EmployeesController@edit')->name('edit');
Route::patch('/edit/{employee}', 'EmployeesController@update')->name('update');
});
而且您忘记在每条路线中发送语言
blade代码:
<td><a href="{{ route('employee.show', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}">{{ $employee->first_name }} {{ $employee->last_name }}</a></td>
<td><a href="{{ route('employee.update', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}" class="btn btn-primary">{{ __('app-text.indexEdit') }}</a></td>
<td><form action="{{ route('employee.delete', ['lang' => app()->getLocale(), 'employee' => $employee->id]) }}" method="post">
控制器功能:
public function edit(Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
错误:
TypeError
Argument 1 passed to App\Http\Controllers\EmployeesController::edit() must be an instance of App\Employee, string given
http://localhost:8000/fr/employee/edit/1
路线:
Route::group(['prefix' => '{lang}'], function() {
Route::prefix('employee')->name('employee.')->group(function() {
Route::get('/edit/{employee}', 'EmployeesController@edit')->name('edit');
Route::patch('/edit/{employee}', 'EmployeesController@update')->name('update');
我正在尝试使应用程序成为 multi-language 应用程序,因此在我添加 lang 变量之后,路由不会传递 $employee->id 变量。我应该为 lang 变量添加一个可传递给我的控制器的变量吗? 任何解决方案?非常感谢。
你的参数有误。正如堆栈跟踪所说,控制器方法需要一个 Employee
模型的实例,但您传入的是一个字符串
改变
public function edit(Employee $employee)
到
public function edit(Request $request, $employeeId) // you can remove $request if you dont intend to perform redirects
所以最后你的代码看起来像
public function edit(Request $request, $employeeId)
{
$employee = Employee::find($employeeId);
$companies = Company::all(); // use all instead of get if you arent going to perform selections.
return view('employee.edit', compact('employee', 'companies'));
}
注意:您可能需要根据提供的$employeeId
我认为你必须像这样修改你的路线
在web.php
Route::get('your-route/{lang}/{id}','YourController@edit');
在您的控制器中
public function edit($lang,Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
如果您在路线中也经过 locale
那么它应该如下所示:
web.php
Route::get('your-Own-route/{lang}/{employee}','YourController@edit');
控制器编辑方法
public function edit($lang,Employee $employee)
{
$companies = Company::get();
return view('employee.edit', compact('employee', 'companies'));
}
首先你可以创建一个路由来更改语言
Route:: get('lang/{lang}', function ($locale) {
session(['locale' => $locale]);
return \Redirect::back();
})
第 2 步:中间件
public function handle($request, Closure $next)
{
App::setLocale(session('locale'));
return $next($request);
}
可以组群后
Route::group(['middleware' => 'language'],function(){
//routes with u want change language
Route::get('/edit/{employee}', 'EmployeesController@edit')->name('edit');
Route::patch('/edit/{employee}', 'EmployeesController@update')->name('update');
});
而且您忘记在每条路线中发送语言