Есть некий ГК: PHP: readonly class PostSigninAction { public function __construct( private Form $form, private UserRecord $userRecord, private AuthSession $authSession, private FlashSession $flashSession ) { } public function __invoke(Request $request, Response $response): Response { if ($this->form->button('signin')) { $login = $this->form->query('login'); $password = $this->form->query('password'); $user = $this->userRecord->getFromLogin($login); if ($user && password_verify($password, $user->getPasswordHash())) { $token = uniqid(); $user->setToken($token); $user->save(); $id = $user->getId(); $token = $user->getToken(); $this->authSession->set($id, $token); return $response->redirect('/menu'); } $this->flashSession->danger('Вы не ввели или неправильно ввели данные'); } return $response->redirect(); } } Может мне нужно попроще быть и сделать так? PHP: readonly class PostSigninAction { public function __construct( private Form $form, private UserRecord $userRecord, private AuthSession $authSession, private FlashSession $flashSession ) { } public function __invoke(Request $request, Response $response): Response { if ($this->form->button('signin')) { $user = $this->userRecord->getFromLogin($this->form->query('login')); if ($user && password_verify($this->form->query('password'), $user->getPasswordHash())) { $user->setToken(uniqid()); $user->save(); $this->authSession->set($user->getId(), $user->getToken()); return $response->redirect('/menu'); } $this->flashSession->danger('Вы не ввели или неправильно ввели данные'); } return $response->redirect(); } }
Не перебарщиваешь. Код должен читаться легко, первый вариант читается легче. Ты сказал что может быть написать попроще и сделал сложнее. Первый вариант выглядит как раз проще. Больше строк не значит сложнее. Ну на мой взгляд.
2 вариант жизненный. В первом например ты иницилизируешь token и заносишь в переменную, последующее в set, но дальше.. какой смысл переписывать переменную токена когда она и тем же значением существовала ? Логическое лишнее действие. Насчет длинных строк в условиях if Лучше делать как в первом - читаемость. Иначе немного на вермишель в мясорубке похожа, хоть и сам порой страдаю такой хней.
PHP: <?php //Controller/Auth public function login(): CommitRepository { if ( isGranted( 'ROLE_USER' ) ) { return $this -> redirect( '/' ); } $this -> setSingleTitles( 'Авторизация' ); $login = $this -> model( \Auth\Login :: class ); if ( isMethodPost() ) { try { $user = $login -> validation( function ( UserInterface $user ) use ( $login ): bool { return $this -> getPasswordHasher( $user ) -> verify( $user -> getPassword(), $login -> getRequestPassword(), $user -> getSalt() ); } ); $login -> sendEmail( $user ); $login -> authUser( $user ); return $this -> redirect( '/' ); } catch ( ViolationsException $e ) { if ( isRequestXHR() ) { return $this -> customJson( RestApi :: success() -> errorMessages( ...$e -> getErrors() ) ); } request() -> attributes -> set( ViolationsException :: class, $e ); } } return $this -> render( 'auth/login', 'auth/auth-template' ); } // Model/Auth/Login public function authUser( UserInterface $user ): void { container( \AuthenticationHandler :: class ) -> createSession( $user, 'secured_area', request() -> request -> has( 'remember_check' ) ); }
@MouseZver смысл апдейта токена в том, что если залогинился, например, в другом браузере, то в первом будет разлогин, так и задумано, нельзя сидеть на сайте с нескольких устройств
@MouseZver сори я не сразу догнал: подумал ты об изменении переменной, я всё понял - переменную я определяю и потом второй раз геттером её же значение и забираю, виноват, осознал