Задать вопрос
alestro
@alestro

Толстый контроллер. Куда вынести логику?

В данный момент имею следующее:
class Login{
	public function index(){
		App::redirect_if(Register::auth()->is_authorized(),'/');
		if( Register::request()->has('registration','post')  ){
			$validator=new Validator();
			$validator->make( Register::request()->only('post','email'),[ 'email'=> ['email','required','unique:users:email'] ] );
			if( $validator->messages()->isEmpty() ){
				$LModel=new LModel( new UMapper( 'users', 'user' ) );
				$LModel->registration( array_merge(Register::request()->only('post','email'),['registration_date'=>time()]) );
			}
			else{
				foreach($validator->messages()->all() as $message){
					echo '<li>'.$message.'</li>';
				}
			}
		}
		elseif( Register::request()->has('auth','post') ){
			$validator=new Validator();
			$validator->make( Register::request()->only('post','email','password'),[ 'email'=> ['email'], 'password'=>['regex:'.Validator::H_PASSWORD_PATTERN] ] );
			
			if($validator->messages()->isEmpty()){
				$LModel=new LModel( new UMapper( 'users', 'user') );
				!$LModel->auth()?:App::redirect('/');
				echo 'Неверный логин или пароль';
			}
			else{
				echo 'Неверный email или пароль';
			}
		}
		View::render('login');
}

Как видно контроллер очень толстый и выполняет не те функции которые должен. Как можно решить это?
Куда следует вынести логику, в соответствующую модель или добавить события и переложить часть реализации на них?
В данном случае это один из самых маленьких контроллеров.
  • Вопрос задан
  • 534 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
trevoga_su
@trevoga_su
а почему регистрация и авторизация не то, что в одном контроллере, а в одном action?
Ответ написан
xDireX
@xDireX
У Вас метод разбит на два логических блока
Register::request()->has('auth','post')
и
Register::auth()->is_authorized()
Вот Вам уже два метода. Плюс у Вас присутствует html код, что не есть хорошо, от него лучше избавится в вид. Я смотрю Вы в View::render не чего кроме файла вида не передаете, так передайте туда массив $message и там уже его разбирайте вашим шаблонизатором или родным php.
Что касается выборки, перенести или в модель или в отдельный метод
Ответ написан
vasiliy0s
@vasiliy0s
JavaScript full-stack developer
На разные routes раскидать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы