ФорумПрограммированиеPHP для идиотовPHP и ООП → Нормальная структура моделей-контроллеров? (свой mvc-движок)

Нормальная структура моделей-контроллеров? (свой mvc-движок)

  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz Сен. 23, 2016, 12:18 д.п.

    Доброго времени суток! Вот делаю свой движок с нуля (проект маленький, да и самому интересно).
    Обычный 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;
        }
    
    Это наша точка
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz Сен. 23, 2016, 12:30 д.п., спустя 12 минут 31 секунду

    Или же лучше было организовать модель, которая тупо содержит кучу таких вот методов

    public static function Method($hueva, $kucha, $parametrov)
    {
        return "$hueva $kucha $parametrov которые можно было записать как поля в этой же модели, например так";
    }
    
    // или же так
    private $hueva;
    private $kucha;
    private $parametrov;
    
    public function Method()
    {
        return "$this->hueva $this->kucha $this->parametrov которые можно уже записаны как ";
    }
    
    Это наша точка
  • Nek

    Сообщения: 109 Репутация: N Группа: Адекваты

    Spritz Сен. 24, 2016, 9:21 д.п., спустя 1 день 8 часов 50 минут

    NewEXE, можно организовать и так, и этак.
    :)
    P.s.: Следуйте PSR.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!