-
Notifications
You must be signed in to change notification settings - Fork 7
Raw interface ideas
petercv edited this page Aug 11, 2012
·
4 revisions
<?php
/**
* Person controller.
*/
class PersonController extends Adapto\Controller\Base
{
protected $_entityDefClass = 'Model\EntityDef\Person';
protected $_formClass = 'Model\UIDef\Person';
}
/**
* Person controller.
*/
class PersonController extends Adapto\Controller\Base
{
// basis configuratie van de controller, hier kun je acties registreren, overriden,
// verwijderen, evt. de entityDef en/of form naam met een setter setten (ipv een property
// zoals voorbeeld hierboven)
protected function init()
{
parent::init();
$this->removeAction('view');
$this->addAction('edit', 'Adapto\Controller\Action\Edit', array('param' => 'value'));
}
// je kunt optioneel deze methode overriden en zelfs de hele entitydef met de base class
// hier opbouwen, maar je kunt ook $_entityDefClass zetten met de class name of op basis van
// een standaard locatie wordt het automatisch ontdekt, daarnaast als er geen gedefinieerd is
// kan hij ook zelf op basis van de controller naam een wild guess doen
protected function createEntityDef()
{
$def = parent::createEntityDef();
$def->remove('created_at');
return $def;
}
// eventueel te overriden om action handlers last-minute te configuren
protected function createAction($name)
{
$action = parent::createAction($name);
if ($name == 'edit') {
$action->setX('y');
}
return $action;
}
// kun je in je controller overriden en implementeren, maar je kan het ook in een aparte class
// doen, standaard implementatie doet het form instantieren op basis van de gespecificeerde
// entity definition van de controller, of je kunt een expliciete benoemen in $_formClass, daarnaast
// zouden we ook automatisch zoeken naar een form met een bepaalde naming scheme kunnen ondersteunen
protected function createUIDef()
{
// form kan door verschillende acties worden gebruikt en is opvraagbaar door de acties
// door controller->getUIDef aan te roepen deze doet evt. een createUIDef of geeft de bestaande
// instantie terug
$form = new Adapto\Controller\UIDef\Base($this->getEntityDef());
$form->get('category', 'parent')->setReadonlyEdit(true)
->setHideList(true);
$form->add(new Adapto\UIDef\Widget\Dummy('test'))->insertAfter('name');
}
// $form->get geeft proxy terug die widget instanties bevat van de genoemde attributen
// elke methode wordt op elk van de widget instanties aangeroepen, voor auto-completion zijn
// de standaard methoden zoals readonly, hiden, tabs, sections etc. expliciet gedefinieerd in
// proxy class maar door __call te implementeren kun je ook andere methoden aanroepen dus als
// 2 attributen hebben van een bepaalde class met een methode die niet standaard is voor alle
// widgets kun je ze toch voor die specifiek aanroepen, fluent interface om te chainen, indien
// je get met een enkele widget of add doet krijg je direct de widget instantie terug en
// roep je het daar op aan
}
class Adapto\Controller\Base
{
protected function init();
protected function setEntityDefClass($class);
protected function createEntityDef();
public function getEntityDef();
protected function setUIDefClass($class);
protected function createUIDef();
public function getUIDef();
protected function addAction($action, $class, $params=array());
protected function removeAction($action, $class);
protected function setActionParams($action, $params)
public function createAction($name);
}
class Adapto\EntityDef\Base
{
public function add($attributeDef);
public function get($name);
public function remove($name);
}
class Adapto\EntityDef\Meta extends Adapto\EntityDef\Base
{
}
class Adapto\EntityDef\AttributeDef\Abstract
{
public function setEntityDef($def);
public function isRequired($entity);
public function validate($entity);
}
class Adapto\Controller\Action\Base
{
public function setUIDefDef($formDef);
public function setEntityDef($entityDef);
public function defaultAction();
public function dispatchAction($action, $request);
}
class Adapto\UIDef\Base
{
public function __construct($entityDef);
public function add($widget);
public function get($name);
public function remove($name);
public function fetchValues($request, $entity);
public function moveBefore($name, $beforeName);
public function moveAfter($name, $afterName);
public function moveToTop($name);
public function moveToBottom($name);
public function dispatchAction($action, $request);
}
interface Adapto\WidgetDef\Interface
{
public function isEditable(int $type);
public function setEditable(int $types); // ADD, EDIT, LIST, true, false
public function isVisible(int $type);
public function setVisible(int $types); // ADD, EDIT, LIST, VIEW, true, false
public function isSearchable(int $type);
public function setSearchable(int $searchable); // LIST, SEARCH, true, false
public function isSortable();
public function setSortable(boolean $sortable);
public function isLabelVisible();
public function setLabelVisible(boolean $visible);
public function getTotalCallback();
public function setTotalCallback($callback); // function($prev, $current, $index) { return $prev - $current; }
public function getDefaultValue();
public function setDefaultValue($value); // override default in entity
...
public function setSection($name);
...
public function moveBefore($name); // convenience, calls UIDef
public function moveAfter($name); // convenience, calls UIDef
public function moveToTop(); // convenience, calls UIDef
public function moveToBottom(); // convenience, calls UIDef
...
public function serialize();
}
interface Adapto\Widget\Interface extends Adapto\WidgetDef\Interface
{
public function renderView(...);
public function fetchEditValue($request);
public function renderEdit(...);
public function fetchSearchValue($request);
public function renderSearch(...);
public function dispatchAction($action, $request);
}
class Adapto\Widget\Abstract implements Adapto\Widget\Interface
{
}
class Adapto\Widget\Date extends Adapto\Widget\Abstract
{
}
class Adapto\WidgetDef\Proxy implements Adapto\WidgetDef\Interface
{
public function __constructs($widgetDefs=array());
public function __call();
}