@cybernoob

Как лучше организовать классы и методы?

Есть сайт со статьями и адрес статьи:
web.com/art/artname
Где art - раздел со статьями, artname - url статьи по нему же идет поиск в БД. В роутере это выглядит так:
$class = $request->$controller.'.controller';
$obj  = new $class;
$act = $obj->showArticle($request->action);

Но потом требуется другой функционал, например авторизация и адрес web.com/auth/login автоматически вызовется auth.controller но дальше проблема потому что в auth.controller нет метода showArticle, а он задан жёстко в роутере.

Варианты:

1) Увеличить длинну URL на секцию в которой казать действие:
web.com/art/show/artname
web.com/art/edit/artname
web.com/auth/enter/login

Тогда можно сделать всё чётко:
$class = $request->$controller.'.controller';
$obj  = new $class;
$act = $obj->$request->action($request->data);


2. Внедрить всем классам один главный метод по-умолчанию, например main и увеличить количество классов не увеличивая секции в URL, редактирование статьи тогда окажется по адресу web.com/artedit/artname
$class = $request->$controller.'.controller';
$obj  = new $class;
$act = $obj->main($request->action);


3. Сделать ветвление if в роутере, самый плохой вариант на мой взгляд, не хочется о нём думать ))
if($controller == 'art'){
    $act = $obj->showArticle($request->action);
}
elseif($controller == 'artedit') {
    $act = $obj->edit($request->action);
}
  • Вопрос задан
  • 97 просмотров
Решения вопроса 3
@Kostik_1993
Web Developer
Вам самому не кажется что это дно? Используйте роутер какой-нибудь нормальный и не костыльте херню вида path to controller
Ответ написан
@Vasiliy_M
моя статья, будут вопросы, пиши
archive.li/bDirF
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Ошибка архитектуры, поставьте другой роутер где сможете более тонко разруливать эти вещи
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект