Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте.
У каждого ресурса, есть bulk actions, где я отмечаю все элементы ресурса (пример: ресурс — product) в этом ресурсе отмечаем все товары, и жмем удалить. Массив айдишников товаров посылается на этот роут
Route::post('post/mass-delete/{model}', 'BackendBaseApiController@massDelete')->name('backend.api.mass-delete');
Сам контроллер
/**
* Mass delete models
*
* @param Request $request
* @param Model $model
* @return \Illuminate\Http\JsonResponse
*/
public function massDelete(Request $request, Model $model)
{
try
{
$model->whereIn('id', $request->ids)->delete();
return response()->json('Successfully deleted');
}
// ....
}
Мой вопрос в том, как динамически подставить нужную модель? И как это сделать в route('backend.api.mass-delete', ['model' => ????])
Спасибо!
Не в сети
Нашел решение. Может комунибудь понадобится.
/**
* @var array
*/
public $models = [
'Manufacturer' => \App\Manufacturer::class,
'Attribute' => \App\Attribute::class,
'Feature' => \App\Feature::class,
// ...
];
/**
* Mass delete models
*
* @param Request $request
* @param $modelName
* @return \Illuminate\Http\JsonResponse
*/
public function massDelete(Request $request, $modelName)
{
try
{
$class = $this->getModel($modelName);
$model = new $class;
$model->whereIn('id', $request->ids)->delete();
return response()->json('Successfully deleted', 200);
}
catch (\Throwable $t)
{
return response()->json(['Error: ', $t->getMessage()], 422);
}
}
/**
* Get model by key
*
* @param $model
* @return mixed
*/
public function getModel($model)
{
return $this->models[$model];
}
Может есть более элегантное решение. Но я пока смог сделать только так. Спасибо челу с SO
https://stackoverflow.com/questions/45648042/how-to-inject-multiple-models-in-one-controller-method/45648145#45648145
Не в сети
Страницы 1