Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)

Как можно упростить контроллер?

Есть такой контроллер, подскажите пожалуйста как можно сделать его почище ?
class PageController extends Controller
{
    public function catalog($alias)
    {
        $arrayUrl = explode("/",$alias);
        $entity = Category::GetByAlias(Arr::last($arrayUrl))->firstOrFail();
        return view("web.page.entity.entity",[
            "entity" => $entity,
            "children" => $entity->children()->SelectMini()->Active()->get(),
            "products" => $entity->products()->Active()->SortImages()->get(),
            "breadcrumbs" => (new Breadcrumbs)->make($entity)
                ->prepend(["name" => "Каталог","url" => route("catalogs")],true)
                ->get()
        ]);
    }
    public function services($alias)
    {
        $arrayUrl = explode("/",$alias);
        $entity = Service::GetByAlias(Arr::last($arrayUrl))->firstOrFail();
        return view("web.page.entity.entity",[
            "entity" => $entity,
            "children" => $entity->children()->SelectMini()->Active()->get(),
            "products" => $entity->products()->Active()->SortImages()->get(),
            "breadcrumbs" => (new Breadcrumbs)->make($entity)
                ->prepend(["name" => "Услуги","url" => route("services")],true)
                ->get()
        ]);
    }
    public function product($alias, $id)
    {
        $product = Product::with("sizes","colors","country","materials")->SortImages()->findOrFail($id);
        return view("web.page.product.product",[
            "product" => $product,
            "breadcrumbs" => (new Breadcrumbs)->make($product)
                ->prepend(["name" => "Каталог","url" => route("catalogs")],true)
                ->get()
        ]);
    }
}
  • Вопрос задан
  • 154 просмотра
Решения вопроса 4
@jazzus
Что говорит Ларавел? Он говорит разделить на контроллеры. Для продуктов ProductController и т.д. Именовать методы index show update и т.д. Массив данных для вьюхи можно получать из своего класса, но можно и так оставить если в контроллере данных мало. Я бы пересмотрел логику формирования данных и наименований т.к. вроде задач сложных нет, но процессы непонятные какие-то $arrayUrl alias entity ит.д.
Ответ написан
Вынести логику в сервисы.
Метод сервиса возвращает массив данных, который потом передаётся во view.
Ответ написан
@art055
Я думаю именно в данном коде всё ок, но судя по названиям должно быть 3 controller , но раз уж есть желание заморачиваться то попробуйте запросы делать в scope и в контроле передать с запросом в view
Ответ написан
Методы catalog и services отличаются одним словом, как минимум можно подумать как их оьбьеденить в один. Для хлебных крошек есть нормальный composer пакет, который позволяет не писать в контроллерах запрос на получение, а вынести логику в отдельный файл.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы