PHP: <?php namespace App\Models\Admin\Configuration; /* * Создана модель * */ use System\Http\Model\Model; class Register extends Model { private $post = []; // Массив с данными в запросе public $err = []; // Массив с ошибками private $user = []; // Массив в который ложим информацию о новом пользователе public function index () { if(isset($_POST)){ $this->post = $_POST; } elseif(isset($_GET)){ $this->post = $_GET; } if(isset($post['submit'])){ // Сделаем проверку на получаемые поля о личной информации пользователя // первый аргумент - это имя в базе или же ключ в массиве user // второй аргумент - это name в html // третий аргумент - это ключ в массиве ошибок $this->_is_pre('user_name', 'firstname', 'er_fname'); $this->_is_pre('user_last_name', 'lastname', 'er_lname'); $this->_is_pre('user_tel', 'telephone', 'er_tel'); $this->_is_pre('user_email', 'email', 'er_email'); if(!empty($this->err)){ // В результате после поверок, если массив с ошибками не пуст то вернём его return $this->err; } // теперь проверим полученный нами пароль // Он не должен быть менее 4 знаков // И состоять должен из английского алфавита и цифр // А также должен совподать со вторым полем пароля $password = $this->protect_pass('password', 'confirm'); // если $password пуст вернём массив ошибок if(empty($password)) { return $this->err; } // Если $password оказался не пустым то теперь хешируем пароль // и кладём в массив user данные о пароле $password_hash = password_hash($password, PASSWORD_DEFAULT); $this->user['user_password'] = $password_hash; // В моей форме есть ешё возможность подписаться // Но она не обязательна поэтому я проверю её просто на существование if (isset($this->post['newsletter'])){ if($this->post['newsletter'] == 1) { $this->user['user_letter'] = 1; } else { $this->user['user_letter'] = 0; } } // Также у меня есть поле обязательное на подтверждение лиц соглашения при регистрации // Что пользователь соглашается с правилами нашего сайта, при регистрации на проекте. if (isset($this->post['license_agree'])){ if($this->post['newsletter'] == 1) { $this->user['license_agree'] = 1; } else { return $this->err['license'] = 2; } } else { return $this->err['license'] = 2; } // Все поля проверены и добавлены в массив данных пользователе // Теперь нужно добавить это в базу данных в таблицу пользователей // Я использую свой дао pattern но вы можете заюзать и обычное добавление $this->table('UsersSite')->Insert($this->user); } $result = $this->table('UsersSite')->get(); return $result; } private function protect_pass($query_value, $confirm) { // функция проверки пароля // Давайте сразу проверим поля на пустоту и существование if(isset($this->post[$query_value]) && !empty($this->post[$query_value]) ) { $this->post[$query_value]; // Во первых проверка на количество введённых символов // По моему хотению оно не должно быть менее 4 символов if (strlen($this->post[$query_value]) < 4) { $this->err[$query_value] = 2; } else { // Также оно должно состоять только из цифр и букв Англ. алфавита if (!preg_match("/^[a-zA-Z0-9]+$/", $this->post[$query_value])) { $this->err[$query_value] = 2; } else { // Если всё хорошо идём дальше // Нам нужно перед добавлением данных в массив // проверить идентичность данных с поля confirm if($this->post[$confirm] == $this->post[$query_value]) { // Если они равны тогда всё хорошо, то вернём пароль return $this->post[$query_value]; } else { $this->err[$confirm] = 2; } } } // вернём пустые данные если мы вышли из условия; return ''; } else { //Если поля не существует то заполним массив ошибок двоечкой // Также используем здесь для ключа сам name поля $this->err[$query_value] = 2; } } private function _is_pre($key_value, $query_value, $error_value) { if($query_value == 'telephone') { // Добавим особую проверку если это телефон if (!preg_match("/((8|\+7)-?)?\(?\d{3,5}\)?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})?/", $this->post[$query_value])) { $this->err[$error_value] = 2; } else { $this->user[$key_value] = $this->post[$query_value]; } } else if($query_value == 'email') { // Добавим особую проверку если это поле email if (!filter_var($this->post[$query_value], FILTER_VALIDATE_EMAIL)) { $this->err[$error_value] = 2; } else { $this->user[$key_value] = $this->post[$query_value]; } } else if(!empty($this->post[$query_value])){ // И просто проверка для остальных текстовых полей $this->user[$key_value] = $this->post[$query_value]; } else { $this->err[$error_value] = 2; } } }
Мож кому пригодится... Правда там местами написано ложим, а надо кладём... Ну не чё страшного надеюсь =_=
А что делает метод _is_pre? Что возвращает? И собственно где комментарии? Откуда юзается System\Http\Model\Model? Может из какого-то фрэймворка? А где объявляется функция password_hash или это стандартная?
это функция php для хеширования. нет это моя собственная библиотека. В данном случае это подключение dao pattern. Там идёт оболчка работы с базой данных. За место неё можешь заюзать, либо mysqli или же pdo. Там всё в комментариях. Даже слишком много я бы сказал комментариев. Там всё написано. --- Добавлено --- @Васяня здесь не хватает только проверки наличия существующих пользователей в базе по e-mail и телефону. Потому что эти поля уникальны. --- Добавлено --- Разве не понятно ? --- Добавлено --- Но я уже слегка переделал её... Доработал до того, что мне надо... --- Добавлено --- Там не isset, а !empty у меня ну да ладно. Это был первый блин комом. Просто скинул ожидал комминтариев типо гавно, ну и разворота ответа почему... Но никто не чего не сказал =( Получилось бы как рефакторинг... А то писать кучи строк кода подряд... Начинает потихоньку голова гудеть и не видишь всех ошибок пока всё не отдебажишь...
@askanim _is_pre это валидатор что ли? Получше бы что нибудь придумал бы для своего движка, я думаю в будущем понадобиться проверять запросы. Наверное не в прикол будет всё время писать новую функцию _is_pre для каждой обработки формы. Вынести лучше в отдельный класс.
@Васяня Это не для движка, это просто так. Форма. У меня нет никакого движка. Я забил на него, я просто пишу на php и периодически пополняю свою библиотеку нужными мне функциями. Я так же юзаю другие библиотеки иногда. framework по моему мнению это бред. Если уже и юзать то рабочий двиг. Либо взять и написать всё самому. Есть задачи под которые не заточена конкретная функция, а изворачиваться и писать кучу говна... Не.. Я лучше напишу пару лишних строк тип, но работать будет быстрее. Я хочу написать движок для сбора mvc. Простого и удобного. Но пока я далёк от идеала, поэтому я пока просто работаю. --- Добавлено --- @Васяня у меня всегда разная _is_pre в разных объектах. Потому что делает разные вещи. Суть одна но делает разное.
А я лучше на хостинге php7 поставлю и redis для кэширования, и не буду из вращаться в погоне за байтами. Я вообще считаю что написание велосипедов это полезно только в целях обучения и то после того как посмотрел на сторонную реализацию дабы не городить огород.
Ты о чём? Я сказал на чистом php. Берёшь паттерн mvc и единую точку входа за основу и пишешь. Да может быть дольше, чем на фреймворк, но зато ты каждый дюйм программы контроллируешь. Потому что ты знаешь, что ты написал. --- Добавлено --- @Васяня не поймёшь наверное. Посмотри статистику сколько людей использует пых без framework. И она порядочная.
@Васяня свои проекты сам и поддерживаешь. Отсюда прибыль и деньги. --- Добавлено --- @Васяня да и как бы если ты не гавнокодишь, то нормальный программист, сможет после код поддерживать.
Бизнес, всегда хитрый. Но если на то дело пошло на ларе можно нагавнокодить так, что не один программист поддерживать это не будет... И скажет переписать, заново если только.
Нет. Нормальный таки пошлет лесом, потому как кроме бизнес-логики проекта ему придется разбираться ещё и в самописных реализациях давно придуманных вещей. И отлавливать там хитрые, лишь одному автору понятные баги.
@romach если там не гавнокод, то там всё нормально будет, а не гавно код подрузумевает, что всё чудно работает везде всё помечено комментариями ит.д разве нет? Мне например приятно смотреть в чистенький комментированный php код на стандарте четвёртом... Для меня всё становится ясненько. Вот если конечно там дикий ужс, то туда без слёз не заглянешь. --- Добавлено --- @romach интересно госпади а на ларе будет не так : D ? Не смешите) Model View Controller у всех один принцип, и стандарт четвёртый, остальное это уже накрученные библиотеки.
@denis01 к чему ? К проекту за три копейки? Если заплатят сделаю документацию. Если нет, то простите. У вас работает - работает.. Хорошо работает? Да хорошо работает всё супер. Какие вопросы?) Программисту если хорошо заплатят он разглядит то, что даже автор ввиду не имел. Я представляю что вполне себе представляю что там навояет программер на ларе за 30к в месяц допустим. А если программисту предложат 100к. Он и в гавнокоде поковыряется и поправит если надо будет. Вот вам и все дела... На mvc логика проследуется, да это время. Я вот мучаюсь со своим кодом, который написал три месяца назад. И даже если бы я писал на чёртовой ларе, я бы вообще плюнул и заного написал.
И не без разницы тебе, какой текст в хеш передавать, из английского алфавита или из арабского? --- Добавлено --- Или вообще не из алфавита. Вот такой, к примеру Код (Text): hv&RIo@vPU!yUi6ql#frS5pmu3tR9
Какое ещё к MVC? Далеко не все в этом мире должно плеваться страничками. Вот нужно мне к примеру сделать так, что бы изменения в БД синхронизировались с индексами в каком-нибудь elastic или скажем отправлять почту не через smtp, а через api какого-нибудь сервиса или наоборот, принимать её, ибо много и дохрена или ещё что-то в этом духе. Я не хочу разбираться при этом в потрохах очередной самописи пытаясь понять из скольки десятков мест в коде оно происходит. Хотя бы потому что это бессмысленная и тупая война с кодом, которой просто не должно быть и которая не принесет реальной пользы.
для работы с входящими данными нужны классы валидации и фильтрации в проекте 2 отдельных независимых класса $this->_is_pre ? isValid, validate ведь так понятнее
@romach не поддержу в этом вопросе я ярый фанат mvc и psr-4 @mkramer не понял тебя... У меня с пасом всё просто проходит только если англ буквы или же они цифры или же то или другое... В чём вопрос при чём тут без разницы? Наверно вы имеете ввиду методы? Тогда скажу так для меня pre - это prepare ( что в переводе с англ. Подготовка), чтобы не писать длинное имя функции я сократил и как видите там не просто валидация, там в конце ещё всё кладётся в массив данных для запроса к бд. Так что называть это валидацией не совсем точно.
это называется экономия на спичках это называется говнокод я пишу так как думаю, может класс User так все нормальные люди пишут. Вам нужно потренироваться называть переменные, чтоб другим понятно было. что такой метод в модели делает? я бы вас понял если бы он в контроллере был как strlen работает с кириллицей? а ведь это только начало
Согласен, для того что бы узнать http метод, автор юзай массив $_SERVER. Ну так и пиши. --- Добавлено --- А почему пользователи добавляются get методом? --- Добавлено --- Мне кажется что модель должна работать с базой. Ты концепцию MVC не соблюдаешь.
Какая связь между MVC и PSR-4, когда одно - шаблон проектирования, а другое - набор рекомендаций к коду? Более того, только с хранилищем данных. Модель не должна регистрировать, валидировать или выполнять ещё какие-либо действия не связанные напрямую с хранением, выборкой и изменением данных. Собственно, валидация - это задача контроллера, а бизнес-логика работы с юзером по хорошему должна лежать в сервисном слое, правда я хз, как нынче это принято обзывать ))
Да в теории так. Но у себя в движке я сделал по другому. У меня контроллер служит только для связи вьюшки и моделей. При чём система такая в контроллере собираются массивы которые получены в моделе, а после отправляются во вью где они разбираются и выводятся. --- Добавлено --- Вообще тебя не понял... Какой то бред написал, в данной строке....