Здравствуйте. Недавно решала задачку, использовала контроллер,модель,вью.
Задача проста:нужно добавить данные в БД в таблицу table2. Но форма добавления данных будет показана только в том случае, если есть данные в table1. То есть в контроллере логика должна быть такая(как мне кажется):
class TestController extends Controller {
public function addBox() {
$test = $this->model('Test');
$data = $test->get_data();
if(count($data)>0){
$this->view->generate("addBox", $data);
} else {
$this->view->generate("forbiddenBox");
}
}
}
На что мне сказали, что в контроллере этого быть не должно, нет понимания ООП и назначения модели не только в работе с БД, ну я аж в шоке. Неужто и правда надо было это в модели делать?И потом как еще расширить модель, чтобы она соответствовала модели?
Michael
5.03.2019 - 18:57
Цитата (Эли4ка @ 5.03.2019 - 07:24) |
На что мне сказали, |
кто сказал?
на заборах тоже много чего пишут, что с того..
Если он такой дока, то почему не показал тебе правильное решение, не помог новичку сам, может тогда и не стоит принимать его критиканство всерьез.
Цитата (Эли4ка @ 5.03.2019 - 07:24) |
и назначения модели не только в работе с БД
|
а другой на это так же может сказать что в "модели" не должно быть работы с БД.
_____________
There never was a struggle in the soul of a good man that was not hard
Эли4каА что есть так?
class TestController extends Controller {
public function addBox() {
$data = $this->model('Test')->get_data();
$result = count($data)>0 ? "addBox" : "forbiddenBox";
$this->view->generate($result, $data);
}
}
Цитата (Michael @ 5.03.2019 - 17:57) |
кто сказал? |
У нас в школе пришел новый парнишка, весь из себя

сайт нам делать должен
Цитата |
Если он такой дока, то почему не показал тебе правильное решение, не помог новичку сам, может тогда и не стоит принимать его критиканство всерьез. |
Он сказал, что это решает в крупных проектах через внедрение зависимостей. Только я так и не поняла школьному сайту с посещаемостью в 0.5человека завем эти внедрения зависимостей
Цитата (VeRTak @ 5.03.2019 - 21:07) |
Эли4ка А что есть так? |
спасибо, хороший вариант
Цитата (Santehnick @ 5.03.2019 - 22:22) |
Нет. Модель есть отображение реальности в какую-либо форму: графическую, математическую, программную или иную. Здание или бизнес процесс можно изобразить в виде какой-либо модели, а в его задаче моделировать нечего. Не слушай таких экспертов по ооп. |
Спасибо. Слушать больше не буду.
Цитата (Эли4ка @ 6.03.2019 - 07:24) |
Только я так и не поняла школьному сайту с посещаемостью в 0.5человека завем эти внедрения зависимостей |
Это как раз у него надо было спросить. И чем не подходит твой Transaction Script тоже.
Однако, я бы, исходя из прочитанного, не стал делать никаких выводов о квалификации. Не известно при каких обстоятельствах и в каком контексте всё это было сказано. Имеет ли этот код отношение к ООП? Нет, считаю, что не имеет, в редакции от VeRTak, кстати, тоже.
Если так будет проще, то рассматривай Model (из MVC) не как один единственной слой в задачи которого входит работа с БД, а как совокупность слоев один из которых будет обеспечивать доступ к хранилищу. В контроллере должна быть логика исключительно связанная с I/O фреймворка. Показывать или нет саму форму я бы вообще отдал на усмотрение вьюхи (фронта) - это же реализация UI. Тем более через AJAX если, судя по названиям.
RonА я и не говорил о ООП
Цитата (Ron @ 6.03.2019 - 13:19) |
Это как раз у него надо было спросить. И чем не подходит твой Transaction Script тоже. |
В понедельник спрошу
Цитата (Ron @ 6.03.2019 - 13:19) |
Показывать или нет саму форму я бы вообще отдал на усмотрение вьюхи (фронта) - это же реализация UI. Тем более через AJAX если, судя по названиям. |
Тут вот какая загвоздка(или это не загвоздка вовсе)
Форма как раз и отдается ответом через аякс запрос, так что во вьюхе наверно не получится это реализовать,ведь запрос конкретный
Цитата (VeRTak @ 6.03.2019 - 16:02) |
А я и не говорил о ООП |
Мало ли кто прочитает, подумает не то, это ж форум. =)
Цитата (Эли4ка @ 6.03.2019 - 16:25) |
Форма как раз и отдается ответом через аякс запрос, так что во вьюхе наверно не получится это реализовать,ведь запрос конкретный |
Вообще конечно через AJAX отдавать кусок HTML такое себе, как по мне лучше избегать по возможности. В отсутствие информации по проекту, будем считать что применение формата JSON не оправдано, иначе говорить более не о чем.
Тогда можно в темплейте условие зафигачить, если массив пуст, - показывать сообщение что невозможно отредактировать (или добавить чего там у тебя). Можно форму дизейблить и сверху/снизу подписывать по какой причине, так было бы намного прозрачнее, имхо.
Смысл убрать условие из контроллера, показывать всегда один и тот же темплейт, просто с разными входными данными. Желательно, кстати, чтобы эти данные были одного типа. То есть пустой массив или не пустой, но массив в том и другом случае. Если добиться одного типа не получается, тогда строгим равенством на true/false.
Цитата (Ron @ 7.03.2019 - 23:09) |
Вообще конечно через AJAX отдавать кусок HTML такое себе, как по мне лучше избегать по возможности. В отсутствие информации по проекту, будем считать что применение формата JSON не оправдано, иначе говорить более не о чем. |
Защита от подмены данных. При обращении генерируется хэш для действия и хранится в БД.
Цитата (Ron @ 7.03.2019 - 23:09) |
Тогда можно в темплейте условие зафигачить, если массив пуст, - показывать сообщение что невозможно отредактировать (или добавить чего там у тебя). Можно форму дизейблить и сверху/снизу подписывать по какой причине, так было бы намного прозрачнее, имхо. |
Попробую так сделать.
Цитата (Ron @ 7.03.2019 - 23:09) |
Смысл убрать условие из контроллера, показывать всегда один и тот же темплейт, просто с разными входными данными. Желательно, кстати, чтобы эти данные были одного типа. То есть пустой массив или не пустой, но массив в том и другом случае. Если добиться одного типа не получается, тогда строгим равенством на true/false.
|
То есть это более лучшая практика, нежели делать ветку if..else?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.