Здравствуйте.
Потихоньку вроде бы начал понимать ООП… вот только есть один момент который я не очень пока понимаю и очень надеюсь на Вашу помощь.
Есть три файла назовем их так Model.php, Controller.php и View.php и каждый файл лежит в соответствующих папках Model, Controller ну и View
В модели у нас пускай будет идти вызов и БД
Model.php
<?php
namespace Model;
use Config\Connect;
class Mоdel extends Connect
{
public function read()
{
$news = self::db()->prepare("SELECT * FROM news");
$news->execute([]);
$news->fetchAll();
}
}
Controller.php
<?php
namespace Controller;
use Model\Model;
class Controller
{
foreach(new Model->read() as $k => $v)
{
// Выводим новости и с помощью include выводим их на страницу
...
include "View/View.php";
}
}
View.php
<div>
<!-- Тут выводим новости -->
</div>
Первый вопрос на сколько правильно я это сделал и второй вопрос как при нажатии на кнопку в View передать данные в модель и получить результат и всё это желательно методом POST?
как и всегда? Форма или ajax. В контроллере обрабатывать запрос.
А “правильно” и “неправильно” тут не особо существуют. Ничто не истинно, всё дозволено )
Для начала надо смотреть решена ли задача, работает ли всё так, как надо.
Потом можно попробовать подумать есть ли какие-то проблемы у решения, можно ли что-то улучшить и их решить, не будет ли очевидных сложностей в ближайшем будущем развития проекта.
Но при этом желательно не стать архитектурным астронавтом )
Или бывает люди следуя карго-культу обкладывают каждый шаг паттернами и фабриками фабрик, делают 100500 юнит-тестов с моками, а оказывается это только добавляет проблем и лучше было делать всё проще.
Обычно не делают new Model и т.п. прямо внутри функции, а передают параметром в конструктор, чтоб можно было легко заменить (например, для автоматических тестов).
И еще тут вывод новостей странный. Так не получится вывести что-то еще вокруг новостей, какие-то общие элементы страницы, <head>, <body>, …, или вся эта логика про вывод HTML будет в контролере, который по идее не об этом. Обычно в контролере загружают один вью передав ему все данные, и он выводит всё, другие вью каких-то элементов и т.п.
Для удобства можно взять какой-нибудь более продвинутый шаблонизатор страниц для РНР вместо самого РНР.
Здравствуйте.
Вчера не много в тупик опять зашел и вот с чем:
пишу класс по типу такого
class Test
{
public function __construct()
{
// тут какой то код
}
public static function tester()
{
// тут какой то код
}
}
вызываю все это дело на странице
$test = Test::tester();
Все что находится в методе tester вызвалось, а вот __construct нет и если я для __construct пропишу static то мне выдаст ошибку. Вопрос как мне вызвать __construct используя static у метода или же лучше переписать все без static