Web¶
Miscellaneous web-related fields can be modelled using the value objects:
Dms\Common\Structure\Web\EmailAddress
- An email addressjohn@gmail.com
Dms\Common\Structure\Web\IpAddress
- An IP address123.123.123.123
Dms\Common\Structure\Web\Url
- An absolute urlhttps://www.google.com
Dms\Common\Structure\Web\Html
- A raw HTML string<p>abc</p>
Entity Structure¶
<?php declare(strict_types = 1);
namespace App\Domain\Entities;
use Dms\Common\Structure\Web\EmailAddress;
use Dms\Common\Structure\Web\Html;
use Dms\Common\Structure\Web\IpAddress;
use Dms\Common\Structure\Web\Url;
use Dms\Core\Model\Object\ClassDefinition;
use Dms\Core\Model\Object\Entity;
class Business extends Entity
{
const EMAIL_ADDRESS = 'emailAddress';
const IP_ADDRESS = 'ipAddress';
const WEBSITE = 'website';
const DESCRIPTION = 'description';
/**
* @var EmailAddress
*/
public $emailAddress;
/**
* @var IpAddress
*/
public $ipAddress;
/**
* @var Url
*/
public $website;
/**
* @var Html
*/
public $description;
/**
* Defines the structure of this entity.
*
* @param ClassDefinition $class
*/
protected function defineEntity(ClassDefinition $class)
{
$class->property($this->emailAddress)->asObject(EmailAddress::class);
$class->property($this->ipAddress)->asObject(IpAddress::class);
$class->property($this->website)->asObject(Url::class);
$class->property($this->description)->asObject(Html::class);
}
}
Mapper Configuration¶
<?php declare(strict_types = 1);
namespace App\Infrastructure\Persistence;
use Dms\Core\Persistence\Db\Mapping\Definition\MapperDefinition;
use Dms\Core\Persistence\Db\Mapping\EntityMapper;
use App\Domain\Entities\Business;
use Dms\Common\Structure\Web\Persistence\EmailAddressMapper;
use Dms\Common\Structure\Web\Persistence\IpAddressMapper;
use Dms\Common\Structure\Web\Persistence\UrlMapper;
use Dms\Common\Structure\Web\Persistence\HtmlMapper;
/**
* The App\Domain\Entities\Business entity mapper.
*/
class BusinessMapper extends EntityMapper
{
/**
* Defines the entity mapper
*
* @param MapperDefinition $map
*
* @return void
*/
protected function define(MapperDefinition $map)
{
$map->type(Business::class);
$map->toTable('businesses');
$map->idToPrimaryKey('id');
$map->embedded(Business::EMAIL_ADDRESS)
->using(new EmailAddressMapper('email_address'));
$map->embedded(Business::IP_ADDRESS)
->using(new IpAddressMapper('ip_address'));
$map->embedded(Business::WEBSITE)
->using(new UrlMapper('website'));
$map->embedded(Business::DESCRIPTION)
->using(new HtmlMapper('description'));
}
}
Module Configuration¶
<?php declare(strict_types = 1);
namespace App\Cms\Modules;
use Dms\Core\Auth\IAuthSystem;
use Dms\Core\Common\Crud\CrudModule;
use Dms\Core\Common\Crud\Definition\CrudModuleDefinition;
use Dms\Core\Common\Crud\Definition\Form\CrudFormDefinition;
use Dms\Core\Common\Crud\Definition\Table\SummaryTableDefinition;
use App\Domain\Services\Persistence\IBusinessRepository;
use App\Domain\Entities\Business;
use Dms\Common\Structure\Field;
/**
* The business module.
*/
class BusinessModule extends CrudModule
{
public function __construct(IBusinessRepository $dataSource, IAuthSystem $authSystem)
{
parent::__construct($dataSource, $authSystem);
}
/**
* Defines the structure of this module.
*
* @param CrudModuleDefinition $module
*/
protected function defineCrudModule(CrudModuleDefinition $module)
{
$module->name('business');
$module->crudForm(function (CrudFormDefinition $form) {
$form->section('Details', [
$form->field(
Field::create('email_address', 'Email Address')->email()->required()
)->bindToProperty(Business::EMAIL_ADDRESS),
//
$form->field(
Field::create('ip_address', 'Ip Address')->ipAddress()->required()
)->bindToProperty(Business::IP_ADDRESS),
//
$form->field(
Field::create('website', 'Website')->url()->required()
)->bindToProperty(Business::WEBSITE),
//
$form->field(
Field::create('description', 'Description')->html()->required()
)->bindToProperty(Business::DESCRIPTION),
//
]);
});
$module->removeAction()->deleteFromDataSource();
$module->summaryTable(function (SummaryTableDefinition $table) {
$table->mapProperty(Business::EMAIL_ADDRESS)->to(Field::create('email_address', 'Email Address')->email()->required());
$table->mapProperty(Business::IP_ADDRESS)->to(Field::create('ip_address', 'Ip Address')->ipAddress()->required());
$table->mapProperty(Business::WEBSITE)->to(Field::create('website', 'Website')->url()->required());
$table->mapProperty(Business::DESCRIPTION)->to(Field::create('description', 'Description')->html()->required());
$table->view('all', 'All')
->loadAll()
->asDefault();
});
}
}