Library · Code examples

Using Flux annotations to generate TCA

A small example of two domain model classes connected with an MM table, with all TCA required to operate the table in TYPO3 generated by Flux by using annotations on the PHP class doc comments.

Description Example of using annotations to generate TCA configuration based on a Model class.
Author NamelessCoder
Creation date 2014-08-24T12:57:49.000Z
Extensions
  1. FluidTYPO3.Flux
Tags
  1. Plugins
Files
  1. ext_tables.php
  2. ext_tables.sql
  3. MyModel.php
  4. Tag.php
<?php
if (!defined('TYPO3_MODE')) {
die('Access denied.');
}
\FluidTYPO3\Flux\Core::registerAutoFormForModelObjectClassName('FluidTYPO3\Demo\Domain\Model\Mymodel');
\FluidTYPO3\Flux\Core::registerAutoFormForModelObjectClassName('FluidTYPO3\Demo\Domain\Model\Tag');
view raw ext_tables.php hosted with ❤ by GitHub
#
# Table structure for table 'tx_demo_domain_model_mymodel'
#
CREATE TABLE tx_demo_domain_model_mymodel (
uid int(11) NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
tstamp int(11) DEFAULT '0' NOT NULL,
crdate int(11) DEFAULT '0' NOT NULL,
cruser_id int(11) DEFAULT '0' NOT NULL,
t3ver_oid int(11) DEFAULT '0' NOT NULL,
t3ver_id int(11) DEFAULT '0' NOT NULL,
t3ver_wsid int(11) DEFAULT '0' NOT NULL,
t3ver_label varchar(30) DEFAULT '' NOT NULL,
t3ver_state tinyint(4) DEFAULT '0' NOT NULL,
t3ver_stage tinyint(4) DEFAULT '0' NOT NULL,
t3ver_count int(11) DEFAULT '0' NOT NULL,
t3ver_tstamp int(11) DEFAULT '0' NOT NULL,
t3_origuid int(11) DEFAULT '0' NOT NULL,
editlock tinyint(4) DEFAULT '0' NOT NULL,
sys_language_uid int(11) DEFAULT '0' NOT NULL,
l10n_parent int(11) DEFAULT '0' NOT NULL,
l10n_diffsource mediumtext,
deleted tinyint(4) DEFAULT '0' NOT NULL,
hidden tinyint(4) DEFAULT '0' NOT NULL,
starttime int(11) DEFAULT '0' NOT NULL,
endtime int(11) DEFAULT '0' NOT NULL,
sorting int(11) DEFAULT '0' NOT NULL,
fe_group varchar(100) DEFAULT '0' NOT NULL,
title tinytext,
summary mediumtext,
confirmed tinyint(1) unsigned DEFAULT '0' NOT NULL,
tags int(11) unsigned DEFAULT '0' NOT NULL,
PRIMARY KEY (uid),
KEY parent (pid)
);
#
# Table structure for table 'tx_demo_domain_model_tag'
#
CREATE TABLE tx_demo_domain_model_tag (
uid int(11) NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
tstamp int(11) DEFAULT '0' NOT NULL,
crdate int(11) DEFAULT '0' NOT NULL,
cruser_id int(11) DEFAULT '0' NOT NULL,
t3ver_oid int(11) DEFAULT '0' NOT NULL,
t3ver_id int(11) DEFAULT '0' NOT NULL,
t3ver_wsid int(11) DEFAULT '0' NOT NULL,
t3ver_label varchar(30) DEFAULT '' NOT NULL,
t3ver_state tinyint(4) DEFAULT '0' NOT NULL,
t3ver_stage tinyint(4) DEFAULT '0' NOT NULL,
t3ver_count int(11) DEFAULT '0' NOT NULL,
t3ver_tstamp int(11) DEFAULT '0' NOT NULL,
t3_origuid int(11) DEFAULT '0' NOT NULL,
editlock tinyint(4) DEFAULT '0' NOT NULL,
sys_language_uid int(11) DEFAULT '0' NOT NULL,
l10n_parent int(11) DEFAULT '0' NOT NULL,
l10n_diffsource mediumtext,
deleted tinyint(4) DEFAULT '0' NOT NULL,
hidden tinyint(4) DEFAULT '0' NOT NULL,
starttime int(11) DEFAULT '0' NOT NULL,
endtime int(11) DEFAULT '0' NOT NULL,
sorting int(11) DEFAULT '0' NOT NULL,
fe_group varchar(100) DEFAULT '0' NOT NULL,
name tinytext,
PRIMARY KEY (uid),
KEY parent (pid)
);
#
# Table structure for table 'tx_demo_mymodel_tag_mm'
#
#
CREATE TABLE tx_demo_mymodel_tag_mm (
uid_local int(11) DEFAULT '0' NOT NULL,
uid_foreign int(11) DEFAULT '0' NOT NULL,
tablenames varchar(30) DEFAULT '' NOT NULL,
sorting int(11) DEFAULT '0' NOT NULL,
KEY uid_local (uid_local),
KEY uid_foreign (uid_foreign)
);
view raw ext_tables.sql hosted with ❤ by GitHub
<?php
namespace FluidTYPO3\Demo\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
/**
* Domain Model: Simple entry with tag relations.
*
* The annotations on the class-level doc comment define
* the resulting TCA CONTROLS like hidden, deleted,
* starttime, endtime - and annotations on each property
* define the TCA FIELD variables like field type,
* which Sheet it belongs to and options for the field.
*
* Annotations are either simple values or a Fluid inline
* syntax, e.g. @Annotation parameter(foo: '123', bar: 'abc').
*
* Flux TCA based model
*
* @Flux\Icon icon(path: 'ext_icon.gif')
* @Flux\Control\Hide
* @Flux\Control\Delete
* @Flux\Control\StartTime
* @Flux\Control\EndTime
* @package FluidTYPO3\Demo\Domain\Model
*/
class MyModel extends AbstractEntity {
/**
* @Flux\Label
* @Flux\Form\Field input(size: 100)
* @Flux\Form\Sheet options
* @validate NotEmpty
* @validate Text
* @var string
*/
protected $title;
/**
* @Flux\Form\Field text
* @Flux\Form\Sheet options
* @validate NotEmpty
* @validate Text
* @var string
*/
protected $summary;
/**
* @Flux\Form\Field checkbox
* @Flux\Form\Sheet options
* @var boolean
*/
protected $confirmed = FALSE;
/**
* @Flux\Form\Field relation(size: 5, maxItems: 99, manyToMany: 'tx_demo_mymodel_tag_mm', table: 'tx_fluidshare_domain_model_tag')
* @Flux\Form\Sheet options
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\FluidTYPO3\Demo\Domain\Model\Tag>
*/
protected $tags;
/**
* Constructor
*/
public function __construct() {
$this->tags = new ObjectStorage();
}
/**
* @param string $title
* @return void
*/
public function setTitle($title) {
$this->title = $title;
}
/**
* @return string
*/
public function getTitle() {
return $this->title;
}
/**
* @param string $summary
* @return void
*/
public function setSummary($summary) {
$this->summary = $summary;
}
/**
* @return string
*/
public function getSummary() {
return $this->summary;
}
/**
* @param boolean $confirmed
* @return void
*/
public function setConfirmed($confirmed) {
$this->confirmed = $confirmed;
}
/**
* @return boolean
*/
public function isConfirmed() {
return $this->confirmed;
}
/**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\FluidTYPO3\Fluidshare\Domain\Model\Tag> $tags
* @return void
*/
public function setTags($tags) {
$this->tags = $tags;
}
/**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\FluidTYPO3\Fluidshare\Domain\Model\Tag>
*/
public function getTags() {
return $this->tags;
}
}
view raw MyModel.php hosted with ❤ by GitHub
<?php
namespace FluidTYPO3\Demo\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
/**
* Domain Model: Tag record
*
* Flux TCA based model
*
* @Flux\Icon icon(path: 'ext_icon.gif')
* @Flux\Control\Hide
* @Flux\Control\Delete
* @package FluidTYPO3\Demo\Domain\Model
*/
class Tag extends AbstractEntity {
/**
* @Flux\Label
* @Flux\Form\Field input
* @Flux\Form\Sheet options
* @validate NotEmpty
* @validate Text
* @var string
*/
protected $name;
/**
* @param string $name
* @return void
*/
public function setName($name) {
$this->name = $name;
}
/**
* @return string
*/
public function getName() {
return $this->name;
}
}
view raw Tag.php hosted with ❤ by GitHub