是否允许在域模型中使用'下划线''_'?这似乎不起作用?
/**
* 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'。
答案 0 :(得分:2)
实际上可以,但您必须确保至少您的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
,并在模型中查找名为this的属性。
答案 1 :(得分:2)
问题不在于是否可能,但是如果允许的话,并且根据编码指南是不允许的。
所有标识符必须使用camelCase并以小写字母开头。 不允许使用下划线字符 ...
这只是“正义”的指导原则,但整个TYPO3核心的设计或重构都考虑到了这一点,如果您遵循这些指导原则,您将自己帮助很多。在后台发生了很多自动化,例如从DB字段到属性名称的映射,您可以在遵循建议的情况下节省很多时间。
底线:问题不在于你是否可以,但如果你应该这样做的话!
答案 2 :(得分:0)
据我所知,这没有问题“列名是:operating_abc”。无论如何,您可以使用camelcase进行设置/获取。我有几个,其中列名称称为“fax_number”,然后是“setFaxNumber(),getFaxNumber()”。这很有效。
为什么要使用下划线的set / get?它不一致,会弄得一团糟。