为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel route() 函数未将正确的类型传递给控制器

Laravel route() 函数未将正确的类型传递给控制器

PHP
月关宝盒 2023-11-03 15:50:33
刀片代码:<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'));}错误:TypeErrorArgument 1 passed to App\Http\Controllers\EmployeesController::edit() must be an instance of App\Employee, string givenhttp://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 变量添加一个可传递给控制器的变量吗?有什么解决办法吗?非常感谢。
查看完整描述

4 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

首先你可以制定一条改变语言的路线


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');

});

并且您忘记在每条路线中发送语言


查看完整回答
反对 回复 2023-11-03
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

如果您也在路线中经过,locale那么应该如下所示:


网页.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'));

}


查看完整回答
反对 回复 2023-11-03
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我认为你必须像这样修改你的路线


在 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'));

}


查看完整回答
反对 回复 2023-11-03
?
慕后森

TA贡献1802条经验 获得超5个赞

你的参数不对。正如堆栈跟踪所示,控制器方法需要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注:您可能需要处理根据提供的信息找不到员工的情况


查看完整回答
反对 回复 2023-11-03
  • 4 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信