Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 06.09.2017 18:16:18

метод для валидации и сохранения с выбросом исключений

Всем привет,
В связи с переходом нв 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, и если лучше то как?
   
Спасибо!

Не в сети

Подвал раздела