Возможно ли сделать сокращенную запись для if в данном случае?

подскажите пожалуйста возможно ли сделать сокращенные записи для if?

public function create(Request $request)
{
    $categoryIds = $request->get('categories');
    $attributes = $request->get('attributes');

    if ($categoryIds) {
        $request->session()->flash('category', end($categoryIds));
    }

    if ($attributes) {
        $request->session()->flash('attributes', $attributes);
    }

    $validator = Validator::make($request->all(), [
        'title' => 'required',
        'price' => 'required',
        'categories' => 'present|array',
        'attributes' => 'present|array',
    ]);

    if ($validator->fails()) {
        return redirect()->route('welcome');
    }

    return redirect()->route('welcome')->with('success', 'Создание прошло успешно');
}

Ответы (3 шт):

Автор решения: Ипатьев

Нет никакой "сокращенной записи для if". Это заблуждение, по какой-то причине очень распространённое.

Есть тернарный оператор, который реализует очень ограниченную функциональность, которую можно сформулировать как присвоение значения по результатам условия.

Использовать его в данном коде можно, но не нужно - это ухудшит читабельность.

→ Ссылка
Автор решения: Qwertiy

Ну, предположим, вот:

public function create(Request $request) {
    $categoryIds = $request->get('categories');
    $attributes = $request->get('attributes');

    $categoryIds && $request->session()->flash('category', end($categoryIds));
    $attributes && $request->session()->flash('attributes', $attributes);

    $validator = Validator::make($request->all(), [
        'title' => 'required',
        'price' => 'required',
        'categories' => 'present|array',
        'attributes' => 'present|array',
    ]);

    return $validator->fails()
        ? redirect()->route('welcome')
        : redirect()->route('welcome')->with('success', 'Создание прошло успешно');
}
→ Ссылка
Автор решения: k0mar

Можно, есесна, упороться и сделать вот так:

CategoryRequest.php

use Illuminate\Foundation\Http\FormRequest;

class CategoryRequest extends FormRequest
{
    /**
     * The URI to redirect to if validation fails.
     *
     * @var string
     */
    protected $redirect = '/';

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required',
            'price' => 'required',
            'categories' => 'present|array',
            'attributes' => 'present|array',
        ];
    }
}

HasCategory.php

use Closure;
use Illuminate\Validation\ValidationException;

class HasCategory
{
    public function handle($request, Closure $next)
    {
        if ($request->get('categories')) {
            $request->session()->flash('category', end($request>get('categories')));
        }

        return $next($request);
    }
}

HasAttribute.php

use Closure;
use Illuminate\Validation\ValidationException;

class HasAttribute
{
    public function handle($request, Closure $next)
    {
        if ($request->get('attributes')) {
            $request->session()->flash('attributes', end($request>get('attributes')));
        }

        return $next($request);
    }
}

контроллер

use Illuminate\Pipeline\Pipeline;

protected $store = [
    HasAttribute::class,
    HasCategory::class
];

public function create(CategoryRequest $request, Pipeline $pipeline)
{
    $pipeline->send($request)->through($this->store)->thenReturn();
}

Что сделано?

  1. Выкинули валидацию в отдельную сущность
  2. Опрокидываем флэш через пайпы

Пайпы толком не описаны в доке, но про Request можно почитать.

Нужно еще подправить вывод алертов и неймспейсики подставить, та и усе

→ Ссылка