#php #laravel #laravel-blade
#php #laravel #laravel-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 AppHttpControllersEmployeesController::edit() must be an instance of AppEmployee, 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?
есть решение? Большое спасибо.
Комментарии:
1. Похоже, что маршрут
employee.show
принимает 1 параметр, но вы передаете 2 параметра.2. Да, я должен просто добавить этот параметр в контроллер?
3. Вы можете попробовать изменить свою функцию, чтобы
public function edit(Request $request)
сообщить мне, если вы получаете другую ошибку4. Можете ли вы включить свое определение маршрута?
5. Я только что включил его выше.
Ответ №1:
сначала вы можете создать маршрут для изменения языка
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');
});
и вы забываете отправлять язык в каждом маршруте
Комментарии:
1. Я забыл это после make, вы можете использовать @if(Session(‘locale’) == ‘en’) или es или другую аббревиатуру во всех блейдах на языке группы
Ответ №2:
Ваши параметры неверны. Как указано в трассировке стека, метод контроллера ожидает экземпляр вашей 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
предоставленного
Комментарии:
1. Я сделал ваше решение, но оно выдало мне другую ошибку, я не думаю, что $employee отличается от Employee $employee . Ошибка: попытка получить свойство ‘id’ не-объекта (Просмотр: /home/ali/Administration/resources/views/employee/edit.blade.php )
2. @Ali ну, идентификатор не найден в
dd()
$employee
переменной, и посмотрим, что вы получите. также вам может потребоваться перенастроить ваши маршруты,3. измените свои маршруты в соответствии с @Tanvir Ahmed soultion
Ответ №3:
Я думаю, вам нужно изменить свои маршруты следующим образом
в 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'));
}
Комментарии:
1. Я пробовал это, проблема возникает из представления блейда, а не из контроллера. Когда я добавил эту переменную lang в массив <td><a href=»{{ route(’employee.update’, [‘lang’ => app()->getLocale(), ’employee’ => $employee->id]) }}» class=»btn btn-primary»>{{ __(‘app-text.indexEdit’) }}</a></td> Это начало выдает ошибку, когда я удаляю ее, ошибка исчезает, но многоязычность тоже исчезла.
2. хорошо, позвольте мне сначала прояснить одну вещь, почему вам нужно передать getLocale()???….. если вы вызовете ее в своем контроллере, вы также можете получить тот же результат
3. и после использования моего кода, какую ошибку вы получили, вы можете мне показать???
4. Та же ошибка в моем вопросе. Как бы вы вызвали ее из контроллера, если хотите изменить язык с помощью навигационной ссылки?
5. итак, с помощью этих кнопок вы меняете языки??? я прав??
Ответ №4:
если вы также передаете 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'));
}
Комментарии:
1. Я включил свои маршруты выше, посмотрите и скажите мне, отличается ли это?
2. вы не можете добавить префикс локали в группу. я также делал это в одном из своих проектов, и это не сработало, поэтому я добавил параметр locale в каждый маршрут, который был единственным решением