TYPO3 - 在域模型中使用下划线
TYPO3 - Using underscore in domain model
是否允许在域模型中使用 'underscore' '_'?这个好像不行?
/**
* Mymodel
*/
class Mymodel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* operating_abc
*
* @var string
*/
protected $operating_abc = '';
/**
* Returns the operating_abc
*
* @return string $operating_abc
*/
public function getOperatingAbc() {
return $this->operating_abc;
}
/**
* Sets the operating_abc
*
* @param string $operating_abc
* @return void
*/
public function setOperatingAbc($operating_abc) {
$this->operating_abc = $operating_abc;
}
}
我收到这个错误:
未捕获的 TYPO3 异常
无法访问受保护的 属性 Vendor\Mymodel\Domain\Model\Mymodel::$operating_abc
这虽然有效:
/**
* Mymodel
*/
class Mymodel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* operatingAbc
*
* @var string
*/
protected $operatingAbc = '';
/**
* Returns the operatingAbc
*
* @return string $operatingAbc
*/
public function getOperatingAbc() {
return $this->operatingAbc;
}
/**
* Sets the operatingAbc
*
* @param string $operatingAbc
* @return void
*/
public function setOperatingAbc($operatingAbc) {
$this->operatingAbc = $operatingAbc;
}
}
输出:
Vendor\Mymodel\Domain\Model\Mymodel prototypepersistent entity (uid=2, pid=0)
operatingAbc => protected 'TWRXT' (4 chars)
uid => protected 2 (integer)
_localizedUid => protected 2 (integer)modified
_languageUid => protected 0 (integer)modified
_versionedUid => protected 2 (integer)modified
pid => protected 0 (integer)
列名是:operating_abc
在输出中我也想得到 'operating_abc'。
事实上是可以的,但你必须确保至少你的 setter 跟在名字后面。因此它必须命名为 setOperating_abc
.
一般来说,您应该使用通常的 lowerCamelCase
约定,尤其是因为您可以免费自动映射到 snail_case
中的数据库字段。如果不这样做,您 必须 添加一个从 DB 到 属性 的映射,如下所示:
plugin.tx_myextension {
persistence {
classes {
MyVendor\MyExtension\Domain\Model\MyModel {
mapping {
columns {
operating_abc.mapOnProperty = operating_abc
}
}
}
}
}
}
否则 Extbase 将在内部将 operating_abc
转换为 operatingAbc
并在模型中寻找这样命名的 属性。
据我所知,这没有问题"The column name is: operating_abc"。无论如何,您可以为 set/get 使用驼峰命名法。我有几个,其中列名称为 "fax_number",然后是 "setFaxNumber(), getFaxNumber()"。行得通。
为什么要使用带下划线的set/get?它不一致,会弄得一团糟。
问题不在于它是否可能,而是它是否被允许,并且根据编码指南,它是不允许的。
All identifiers must use camelCase and start with a lowercase letter. Underscore characters are not allowed...
它是 "just" 指南,但整个 TYPO3 核心的设计或重构都考虑到了这一点,如果您遵循这些指南,您将对自己有很大帮助。许多自动化在后台发生,例如从 DB 字段到 属性 名称的映射,您只需按照建议进行操作就可以节省很多时间。
底线:问题不是你能不能做,而是你是否应该做!
是否允许在域模型中使用 'underscore' '_'?这个好像不行?
/**
* Mymodel
*/
class Mymodel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* operating_abc
*
* @var string
*/
protected $operating_abc = '';
/**
* Returns the operating_abc
*
* @return string $operating_abc
*/
public function getOperatingAbc() {
return $this->operating_abc;
}
/**
* Sets the operating_abc
*
* @param string $operating_abc
* @return void
*/
public function setOperatingAbc($operating_abc) {
$this->operating_abc = $operating_abc;
}
}
我收到这个错误:
未捕获的 TYPO3 异常 无法访问受保护的 属性 Vendor\Mymodel\Domain\Model\Mymodel::$operating_abc
这虽然有效:
/**
* Mymodel
*/
class Mymodel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* operatingAbc
*
* @var string
*/
protected $operatingAbc = '';
/**
* Returns the operatingAbc
*
* @return string $operatingAbc
*/
public function getOperatingAbc() {
return $this->operatingAbc;
}
/**
* Sets the operatingAbc
*
* @param string $operatingAbc
* @return void
*/
public function setOperatingAbc($operatingAbc) {
$this->operatingAbc = $operatingAbc;
}
}
输出:
Vendor\Mymodel\Domain\Model\Mymodel prototypepersistent entity (uid=2, pid=0)
operatingAbc => protected 'TWRXT' (4 chars)
uid => protected 2 (integer)
_localizedUid => protected 2 (integer)modified
_languageUid => protected 0 (integer)modified
_versionedUid => protected 2 (integer)modified
pid => protected 0 (integer)
列名是:operating_abc
在输出中我也想得到 'operating_abc'。
事实上是可以的,但你必须确保至少你的 setter 跟在名字后面。因此它必须命名为 setOperating_abc
.
一般来说,您应该使用通常的 lowerCamelCase
约定,尤其是因为您可以免费自动映射到 snail_case
中的数据库字段。如果不这样做,您 必须 添加一个从 DB 到 属性 的映射,如下所示:
plugin.tx_myextension {
persistence {
classes {
MyVendor\MyExtension\Domain\Model\MyModel {
mapping {
columns {
operating_abc.mapOnProperty = operating_abc
}
}
}
}
}
}
否则 Extbase 将在内部将 operating_abc
转换为 operatingAbc
并在模型中寻找这样命名的 属性。
据我所知,这没有问题"The column name is: operating_abc"。无论如何,您可以为 set/get 使用驼峰命名法。我有几个,其中列名称为 "fax_number",然后是 "setFaxNumber(), getFaxNumber()"。行得通。
为什么要使用带下划线的set/get?它不一致,会弄得一团糟。
问题不在于它是否可能,而是它是否被允许,并且根据编码指南,它是不允许的。
All identifiers must use camelCase and start with a lowercase letter. Underscore characters are not allowed...
它是 "just" 指南,但整个 TYPO3 核心的设计或重构都考虑到了这一点,如果您遵循这些指南,您将对自己有很大帮助。许多自动化在后台发生,例如从 DB 字段到 属性 名称的映射,您只需按照建议进行操作就可以节省很多时间。
底线:问题不是你能不能做,而是你是否应该做!