2017-09-01 38 views
1

是行为的相关配置访问?在这个特定的情况下,行为被附加到表格中。我想知道是否有可能以某种方式获取字段属性,稍后在代码中?从代码中获取行为相关的配置

<?php 
class MyRandomTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     parent::initialize($config); 
     ... 
     // Add Cipher behavior 
     $this->addBehavior('CipherBehavior.Cipher', [ 
       'fields' => [ 
         'original' => 'string', 
         'changed' => 'string', 
       ] 
     ]); 
    } 
    ... 
} 
?> 

如果我加载表和转储的内容,我没有看到的行为列出:

$table = TableRegistry::get('MyRandomTable'); 
var_dump($table); 

部分转储内容:

protected '_behaviors' => 
    object(Cake\ORM\BehaviorRegistry)[170] 
     protected '_table' => 
     &object(Cake\ORM\Table)[172] 
     protected '_methodMap' => 
     array (size=0) 
      empty 
     protected '_finderMap' => 
     array (size=0) 
      empty 
     protected '_loaded' => 
     array (size=0) 
      empty 
     protected '_eventManager' => 
     object(Cake\Event\EventManager)[165] 
      protected '_listeners' => 
      array (size=0) 
       ... 
      protected '_isGlobal' => boolean false 
      protected '_eventList' => null 
      protected '_trackEvents' => boolean false 
     protected '_eventClass' => string '\Cake\Event\Event' (length=17) 

我想怎么办在控制器中,是获取字段并将其传递给视图。

编辑#1

使用CakePHP v3.3.16

编辑#2

我看到行为信息,我装表时已经错过了插件前缀:

$table = TableRegistry::get('PluginName.MyRandomTable'); 

显示:

protected '_behaviors' => 
    object(Cake\ORM\BehaviorRegistry)[143] 
     protected '_table' => 
     &object(PluginName\Model\Table\MyRandomTable)[94] 
     protected '_methodMap' => 
     array (size=4) 
      'timestamp' => 
      array (size=2) 
       ... 
      'touch' => 
      array (size=2) 
       ... 
      'encrypt' => 
      array (size=2) 
       ... 
      'decrypt' => 
      array (size=2) 
       ... 
     protected '_finderMap' => 
     array (size=0) 
      empty 
     protected '_loaded' => 
     array (size=2) 
      'Timestamp' => 
      object(Cake\ORM\Behavior\TimestampBehavior)[181] 
       ... 
      'Cipher' => 
      object(CipherBehavior\Model\Behavior\CipherBehavior)[192] 
       ... 
     protected '_eventManager' => 
     object(Cake\Event\EventManager)[175] 
      protected '_listeners' => 
      array (size=4) 
       ... 
      protected '_isGlobal' => boolean false 
      protected '_eventList' => null 
      protected '_trackEvents' => boolean false 
     protected '_eventClass' => string '\Cake\Event\Event' (length=17) 

回答

2

首先是不正确,它需要一个命名空间,否则就无法找到,你会用\Cake\ORM\Table一个实例结束了(一个这样称为auto/generic-table)而不是其具体的子类,因此你的行为缺失。

话虽这么说,这取决于该行为如何被编程。如果遵循缺省的配置样式,那么你可以通过它config()getConfig()(如CakePHP的3.4)的方法访问配置。

当然,你必须访问的行为,它是连接不只是表类。

$fields = $table->behaviors()->get('Cipher')->config('fields'); 

参见

+0

我的表有一个命名空间,我只是省略它来保持我以为相关部分。 – TekiusFanatikus

+0

你部分在那里...因为我正在加载插件表,所以我需要在插件名称前加前缀。我现在看到一些行为元数据/信息。 – TekiusFanatikus

+0

这有效......在你的命令中有一个错字,它是“行为”而不是“行为”:) – TekiusFanatikus

0

您可以通过schema()->columns()获取表格的列名称。

示例 -所有的表类文件的

$getColumnArray = $this->Users->schema()->columns();//return Users Table Colums Name Array 
$getColumnArray = $this->Users->associations()->keys()//return Users assocation table key