ddimonn8080
@ddimonn8080

Оцените валидацию и обновление данных товара в контроллере?

Здравствуйте, в предыдущем моем вопросе я спрашивал как правильно делать валидацию формы. Были советы, переделал все. Дайте пожалуйста оценку. Что правильно? Что можно исправить и сделать по-другому?
app/Http/Controllers/Admin/ProductsController.php

use App\Http\Requests\ProductsUpdateRequest;

class ProductsController extends Controller
{
public function editRequestProduct(ProductsUpdateRequest $request, int $id)
{
        $validated = $request->validated();

        $objProducts = Products::find($id);
        if(!$objProducts){
            return abort('404');
        }

        $image = ImageDNK::save($request, 'image');
        $tab_bg = ImageDNK::save($request, 'tab_bg');
        $is_reccomended = $request->has('is_reccomended') ? true : false;

        $validated['image'] = $image;
        $validated['tab_bg'] = $tab_bg;
        $validated['is_reccomended'] = $is_reccomended;

        $objProducts->fill($validated);

        if(!$objProducts->save()){
            return back()->with('error', 'Товар не изменен. Попробуйте ещё раз');
        }

        $hasCategory = $request->input('product_category') != 0;

        if($hasCategory){
            $objCatsRels = new CategoriesRelationship();
            $objCatsRels = $objCatsRels->create([
                'object_id' => $id,
                'category_id' => $request->input('product_category'),
            ]);
        }

        if($objProducts && (!$hasCategory || $objCatsRels)){
            return back()->with('success', trans('messages.products.successUpdated'));
        }

        return back()->with('error', 'Товар не изменен. Попробуйте ещё раз');
    }
}


app/Http/Requests/ProductsUpdateRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class ProductsUpdateRequest extends FormRequest
{
    public function rules()
    {
        return [
            'title' => 'required|string|min:4|max:25',
            'slug' => array(
                'required',
                'string',
                'min:4',
                'max:25',
                'regex:/^[a-z0-9а-яё-]+$/u',
                //'unique:products',
                Rule::unique('products')->ignore($this->id),

            ),
            'excerpt' => 'required|string|min:4|max:100',
            'content' => 'required|string|min:4|max:300',
            'descrtitle' => 'required|string|min:4|max:100',
            'descrtext' => 'required|string|min:4|max:300',
            'descr' => 'required|string|min:4|max:300',
            'regular_price' => array(
                'required',
                'regex:/\d+/',
            ),
            'discount' => array(
                'required',
                'min:0',
                'max:100',
                'regex:/^\d+(\.\d{1,2})?$/',
            ),
            'image' => 'mimes:jpeg,jpg,png,gif|max:10000',
            'tab_bg' => 'mimes:jpeg,jpg,png,gif|max:10000',
            'product_description_tab_content' => 'string|max:10000',
            'product_ingredients_tab_content' => 'string|max:10000',
            'product_usage_tab_content' => 'string|max:10000',
            'is_reccomended' => '',
        ];
    }
}


Спасибо
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@NubasLol
1)Правильно движешься, что валидация в реквестах.
2)Избыточный код
$objProducts = Products::find($id);
        if(!$objProducts){
            return abort('404');
        }


Используй findOrFail

3) $is_reccomended = $request->has('is_reccomended') ? true : false;

Метож has и так вернет тру или фолс, тернарный оператор лишний

4)(!$hasCategory || $objCatsRels)

Опять же, лишнее, ты же создаешь objCatsRels если не hasCategory

Ну и разнеи логику по сервисам.

В контроллере должен быть понятный читабельный код, что бы любой сразу понял, что в не происходит
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 июл. 2019, в 10:42
150000 руб./за проект
18 июл. 2019, в 10:14
300 руб./за проект
18 июл. 2019, в 09:39
5000 руб./за проект