在 TYPO3 中,域模型(Domain Model)是扩展开发的核心部分。虚拟属性(Virtual Properties)是指那些不直接映射到数据库字段的属性,而是通过某种逻辑计算或组合其他属性生成的值。
@TYPO3\CMS\Extbase\Annotation\ORM\Transient
注释来标记这个方法为虚拟属性。假设你有一个 Person
模型,包含 firstName
和 lastName
属性。你想要一个虚拟属性 fullName
,它是 firstName
和 lastName
的组合。
首先,定义你的域模型类 Person
:
namespace Vendor\Extension\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
class Person extends AbstractEntity
{
/**
* @var string
*/
protected $firstName = '';
/**
* @var string
*/
protected $lastName = '';
/**
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @param string $firstName
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
}
/**
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* @param string $lastName
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
}
/**
* @return string
* @TYPO3\CMS\Extbase\Annotation\ORM\Transient
*/
public function getFullName()
{
return $this->firstName . ' ' . $this->lastName;
}
}
在 getFullName
方法上使用 @TYPO3\CMS\Extbase\Annotation\ORM\Transient
注释,标记它为虚拟属性。这告诉 TYPO3 这个属性不需要映射到数据库字段。
在你的控制器或视图中,你可以像使用普通属性一样使用虚拟属性。
namespace Vendor\Extension\Controller;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use Vendor\Extension\Domain\Model\Person;
class PersonController extends ActionController
{
public function showAction(Person $person)
{
$this->view->assign('person', $person);
}
}
在你的 Fluid 模板中,你可以直接访问虚拟属性:
<f:layout name="Default" />
<f:section name="content">
<h1>Person Details</h1>
<p>Full Name: {person.fullName}</p>
</f:section>
云+社区技术沙龙[第19期]
云+社区技术沙龙[第20期]
企业创新在线学堂
云+社区技术沙龙[第17期]
企业创新在线学堂
DB TALK 技术分享会
腾讯位置服务技术沙龙
Techo Day 第三期
serverless days
腾讯云GAME-TECH游戏开发者技术沙龙
领取专属 10元无门槛券
手把手带您无忧上云