我正在CakePHP 3.0.11中编写一个行为,我可以在我的行为的beforeSave()方法中使用var_dump()和Log :: debug()$ event对象,并且可以看到对象数据,但无法访问对象的属性。 我只是想从对象中获取表(别名,className,tablename,any)名称 我想在我的行为中做这样的事情:
public function beforeSave(Event $event, Entity $entity)
{
$table = $event->_alias;
// etc.
}
我尝试了事件的subject()方法,该方法从事件中提取表对象,
$table = $event->subject();
当我var_dump或调试返回的对象时,它显示:
Debug: App\Model\Table\CompaniesTable Object
(
[registryAlias] => Companies
[table] => companies
[alias] => Companies
[entityClass] => App\Model\Entity\Company
[associations] => Array
(
[0] => defaultshippingusers
(...)
[defaultConnection] => default
[connectionName] => default
)
但我无法从我的$ table对象访问'table','alias'等。 当我这样做时,我得到一个致命的错误:
表公司与“别名”无关
是否有一种简单的方法可以从行为中的$ event对象中获取Table名称?
答案 0 :(得分:7)
转储对象不一定能为您提供对象结构的表示,而是通过the magic __debugInfo()
method定义的自定义格式化调试信息。
<强> https://github.com/cakephp/cakephp/blob/3.0.11/src/ORM/Table.php#L2190 强>
Table
个类没有table
或alias
属性,但具有相同名称的方法只需查看Cookbook和API文档。
$alias = $event->subject()->alias();
答案 1 :(得分:0)
您还可以直接从行为中获取表名或别名,而无需使用$ event对象:
$this->getTable()->table();
$this->getTable()->alias();
如果您将自己的函数添加到未传递$ event的行为中,这将非常有用。