Доброго времени суток! Вот делаю свой движок с нуля (проект маленький, да и самому интересно).
Обычный MVC - роутер, запросы направляются на главный /index.php, там $router->run(), в котором вызывается контроллер/экшн (типа site.ru/site/index; управление передается в SiteController, actionIndex с параметрами GET, POST и FILES, если переданы).
Вопрос в том, правильно ли я организовал модели и рациональны, не толсты контроллеры?
А именно: в модели должны вообще быть поля? Или лучше без них обойтись, вызывать в контроллере, статически, без создания объекта. Мини-пример.
$userData = User::getUserDataById($id);
$result = User::login($email, $password);
//ЛИБО
$user = new User($id);
$user->register();
Больше кода - сейчас у меня модель сделана так
//Модель юзера
class User
{
const PIN_LENGTH = 4;
private $id_user;
private $email;
private $password;
private $pin;
private $power;
private $pseudo_balance;
private $role;
function __construct()
{ //действия }
public function register()
{
$hashedPassword = password_hash($this->password, PASSWORD_DEFAULT);
// Соединение с БД
// Текст запроса к БД
$sql = 'INSERT INTO User (email, password, pin)'
.' VALUES (:email, :password, :pin)';
// Получение и возврат результатов. Используется подготовленный запрос
$result = $GLOBALS['DBH']->prepare($sql);
$result->bindParam(':email', $this->email, PDO::PARAM_STR);
$result->bindParam(':password', $hashedPassword, PDO::PARAM_STR);
$result->bindParam(':pin', $this->pin, PDO::PARAM_STR);
if($result->execute())
{
$this->id_user = $GLOBALS['DBH']->lastInsertId();
return $this;
}
return false;
}
Контроллер
public function actionSignup($params)
{
$email = false;
$password = false;
$pin = false;
$submit = false;
extract($params['post'], EXTR_IF_EXISTS);
$result = false;
if(!empty($submit))
{
$user = new User($email, $password, $pin);
$errors = array($user->checkEmail(), $user->checkPassword(), $user->checkPin());
$errors = array_filter($errors);
//$errors = array('Извините, регистрация временно приостановлена');
if(empty($errors))
{
$result = $user->setUserData($email, $password, $pin)->register();
if(!$result)
{
$errors[] = 'Что-то пошло не так при записи в базу данных. Сообщите администратору';
}
}
}
// Подключаем вид
require_once(ROOT.'/views/user/signup.php');
return true;
}