Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Всем привет,
В связи с переходом нв laravel 5.5 читаю о методах throw_if и throw_unless и возник вопрос :
В модели я прописывал метод для валидации и сохранения :
public static function updateCategory(int $category_id, array $dataArray, bool $run_validation= true) : array
{
if( $run_validation ) { // data must be validated before saving
if ( !empty($category_id) and with(new Category)->isPositiveNumeric($category_id) ) {
$category= Category::find($category_id);
if ( empty($category) ) { // if have id of existing object it would be updated
return [ 'error_code' => 1, 'errorsList' => ["Category # '".$category_id."' not found" ], 'success_message' => "", 'category_id' => '' ];
}
$existing_image_dir= Category::getCategoryDir($category_id);
$is_insert= false;
}
$additional_name_validation_rule= 'check_category_unique_by_name:'.( !empty($category_id)?$category_id:'');
$rules = [
'name' => 'required|max:50|'.$additional_name_validation_rule,
'img' => 'max:50|',
'description' => '',
];
$validator = Validator::make( $dataArray , $rules);
if ($validator->fails()) { // if error on validation return errors list
$errorsList = Category::getErrorsList($validator);
return [ 'error_code' => 1, 'errorsList' => $errorsList, 'success_message' => "", 'category_id' => '' ];
}
} // if( $run_validation ) { // data must be validated before saving
...
$success= self::runSaveFunction($dataArray, DB::getTablePrefix()."update_category");
if ( $success ) {
return [ 'error_code' => 0, 'errorsList' => [], 'success_message' => "Category '".$dataArray['name']."' was ".($is_insert?"created":"updated"), 'category_id' => $category_id ];
}
return [ 'error_code' => 1, 'errorsList' => ["Error ".($is_insert?"creating":"updating")." category '".$dataArray['name']."' " ], 'success_message' => "", 'category_id' => '' ];
} // public static function updateCategory`(int $category_id, array $dataArray, bool $run_validation= true) : array
То есть в массиве возврата был код ошибки, строка ошибки, id последнего вставленного элемента. Так было привычней и понятней.
И в контроле я обрабытывал этот массив возврата, если была пользовательская ошибка:
public function edit(Request $request)
{
...
if ($request->isMethod('post')) // the Form was submitted to add/update data
{
$categoryData = [ // Collect array of data for item adding/updating
'name' => $this->workTextString($request->input('name')),
'description' => $this->workTextString($request->input('description')),
'cbx_clear_image' => $request->input('cbx_clear_image'),
];
DB::beginTransaction();
try {
$retArray = Category::updateCategory( (int)$id, $categoryData, true );
DB::commit();
} catch (\Exception $e) {
DB::rollback();
$this->setFlashMessage( $e->getMessage(), 'danger' );
return redirect($redirect_url);
}
if ( empty($retArray['error_code']) ) // there was NO error : make data submit
{ //
if ( !empty($retArray['success_message']) and !empty($retArray['category_id']) ) {
if ($is_reopen) $redirect_url = $this->backend_home_url . '/admin/category/edit?id='.$retArray['category_id'].'&'.$page_parameters_with_sort;
$this->setFlashMessage( $retArray['success_message'] );
return redirect($redirect_url);
}
}
else { // there WERE errors on update Category
$errorsList= $retArray['errorsList'];
$category = $this->setInvalidEditableData($category, $is_insert, $id); /* When submitting of the editor is failed with validation errors, this function is triggered to fill editable fields with user's data */
}
} // the Form was submitted to add/update data
...
}
Вопрос в том, а не лучше ли переделать с выбросом пользовательских исключений и если это будет, так сказать, в стиле 5.5, и если лучше то как?
Спасибо!
Не в сети