try{
$page = $pageService->findByUrl($url);
return $page->render();
}
catch (PageNotFound $ex) {
return $this->view("404_page");
}
catch (UnAutorization $ex) {
return redirect("/page-signin");
}
catch (Exception $ex) {
$this->logger->debug($ex->getMessage());
return $this->view("error_page");
}
$validation = new Symfony\Component\Validator\Validation;
$form = (new Simpleform('loginform', '/form/', $validation))
->setTwig($twig);
$simpleform = $form
->addClass('login')
->setRequired_label(NULL);
$simpleform->addField(
(new Input('userlogin'))
->setId("userlogin")
->addAttr('placeholder',"электронная почта")
,'Логин/email', 'email|required');
$simpleform->addField(
(new Input('password'))
->addAttr("type", "password")
->addAttr('placeholder',"секретный код")
->setValue('')
,'Пароль', 'required');
$simpleform->addControl(
new \Core\Form\Control\Button("submit", "Войти в личный кабинет")
);
echo $simpleform->render();
Но по-хорошему, мне ведь нужно отдать данные об авторе, во View, тоже как объект? Т.е. свойство author_id должно быть объектом author в котором присутствует id, имя автора, аватар и т.д.. На каком этапе нужно получать с помощью author_id информацию об авторе поста?
Entity это класс для работы с БД или другим хранилищем данных.
<?php
//Entity
class Entity{
use ObjectToArrayTrait;
protected $id;
public function setId($id){
$this->id = $id;
return $this;
}
public function getId(){
return $this->id;
}
}
//Validation
class UserValidation extend Validation{
protected $user;
public function __construct(User $user){
$this->user = $user;
}
public function isValid(){
//validation logic
return true
}
}
//User
class User extends Entity
{
protected $email;
protected $name;
public function __construct(Email $email, $name)
{
$this
->setEmail($email)
->setName($name);
}
//даже если изменим через свойство другой класс не пройдет
public function setEmail(Email $email){
$this->email = $email;
return $this;
}
public function setName($name){
$this->name = $name;
return $this;
}
public function getEmail(){
return $this->email;
}
public function getName(){
return $this->name;
}
}
//UserRepo
class UserRepo{
protected $db;
function __construct(ActiveRecord $db){
$this->db = $db;
}
//получаем User
public function getUserById($id){
$row = $this->db->getRow("users")->where("id",$id);
$user
= (new User(new Email($row["email"])))
->setName($row["name"]);
return $user;
}
//сохраняем
public function save(User $user){
if($user->getId()>0){
$this->db->update("users",$user->toArray())->where("id",$user->getId());
}
else{
$this->db->insert("users",$user->toArray());
}
}
}
//принимаем пост
$post = $request->all();
//создаем объект
$user = (new User(new Email($post["email"])))->setName($post["name"]);
//валидируем
$validation = new UserValidation($user);
//сохраняем
if(!$validation->isValid()){
throw new ValidationError($validation->getErrors());
}
else{
$userRepo->save($user);
}