@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);
}
  • Вопрос задан
  • 99 просмотров
Решения вопроса 3
@Kostik_1993
Web Developer
Вам самому не кажется что это дно? Используйте роутер какой-нибудь нормальный и не костыльте херню вида path to controller
Ответ написан
@Vasiliy_M
моя статья, будут вопросы, пиши
archive.li/bDirF
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Ошибка архитектуры, поставьте другой роутер где сможете более тонко разруливать эти вещи
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы