如何解决Laravel route函数未将正确的类型传递给控制器
刀片服务器代码:
<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','employee' => $employee->id]) }}" class="btn btn-primary">{{ __('app-text.indexEdit') }}</a></td>
<td><form action="{{ route('employee.delete','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');
我正在尝试使该应用程序成为多语言应用程序,因此,在添加lang变量后,路由不会传递$ employee-> id变量。我应该为lang变量添加一个可传递给控制器的变量吗? 有什么办法吗?非常感谢。
解决方法
首先,您可以进行语言更改
let count = 0;
let baseline_next = ["#one","#two","#three"];
$("#one").click(function() {
$(baseline_next[count]).click();
count++;
});
第2步:中间件
Route:: get('lang/{lang}',function ($locale) {
session(['locale' => $locale]);
return \Redirect::back();
})
可以分组之后
public function handle($request,Closure $next)
{
App::setLocale(session('locale'));
return $next($request);
}
您忘了在每种路线中发送语言
,您的参数错误。如堆栈跟踪所示,控制器方法期望使用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','companies'));
}
,
如果您也在路线中通过locale
,则应该如下所示:
web.php
Route::get('your-Own-route/{lang}/{employee}','YourController@edit');
控制器编辑方法
public function edit($lang,'companies'));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。