Last active
June 20, 2020 08:19
-
-
Save janpecha/043b1ee808f05fdda90b8dcce1566f84 to your computer and use it in GitHub Desktop.
Model with LeanMapper + Nette Forms
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Model; | |
use Libs\IDateTimeFactory; | |
class SenderFacade | |
{ | |
/** @var IDateTimeFactory */ | |
private $dateTimeFactory; | |
/** @var Repository\SenderRepository */ | |
private $senderRepository; | |
public function __construct( | |
IDateTimeFactory $dateTimeFactory, | |
Repository\SenderRepository $senderRepository | |
) | |
{ | |
$this->dateTimeFactory = $dateTimeFactory; | |
$this->senderRepository = $senderRepository; | |
} | |
/** | |
* @return Entity\Sender | |
* @throws \App\NotFoundException | |
*/ | |
public function get($id) | |
{ | |
return $this->senderRepository->get($id); | |
} | |
/** | |
* @return Entity\Sender | |
*/ | |
public function create($name, $email) | |
{ | |
$sender = new Entity\Sender; | |
$sender->name = $name; | |
$sender->email = $email; | |
$sender->created = $this->dateTimeFactory->create(); | |
$this->senderRepository->persist($sender); | |
return $sender; | |
} | |
/** | |
* @return void | |
*/ | |
public function update(Entity\Sender $sender, $name, $email) | |
{ | |
$sender->name = $name; | |
$sender->email = $email; | |
$sender->updated = $this->dateTimeFactory->create(); | |
$this->senderRepository->persist($sender); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Admin\Forms; | |
use App\Forms; | |
use App\Model; | |
use App\Model\Entity; | |
use Nette; | |
use Nette\Application\UI\Form; | |
class SenderFormFactory | |
{ | |
/** @var Model\SenderFacade */ | |
private $senderFacade; | |
/** @var Forms\FormFactory */ | |
private $formFactory; | |
public function __construct( | |
Model\SenderFacade $senderFacade, | |
Forms\FormFactory $formFactory | |
) | |
{ | |
$this->senderFacade = $senderFacade; | |
$this->formFactory = $formFactory; | |
} | |
public function create(Entity\Sender $sender = NULL, $onSuccess) | |
{ | |
$form = $this->formFactory->create(); | |
$form->addText('name', 'Název') | |
->setRequired('Zadejte prosím název odesílatele.'); | |
$form->addEmail('email', 'E-mail') | |
->setRequired('Zadejte prosím e-mail odesílatele.'); | |
$form->addSubmit('save', 'Uložit odesílatele'); | |
if ($sender) { | |
$form->setDefaults(array( | |
'name' => $sender->name, | |
'email' => $sender->email, | |
)); | |
} | |
$form->onSuccess[] = function (Form $form, $values) use ($sender, $onSuccess) { | |
if ($sender) { | |
$this->senderFacade->update( | |
$sender, | |
$values->name, | |
$values->email | |
); | |
} else { | |
$sender = $this->senderFacade->create( | |
$values->name, | |
$values->email | |
); | |
} | |
$onSuccess($sender); | |
}; | |
return $form; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment