如何使用cakephp 3中的插件管理不同版本的应用程序?

时间:2018-02-14 20:02:22

标签: plugins cakephp-3.0

我有一个cakephp 3申请

我有一个通用视图,根据每个Model中配置的字段的数组结构呈现数据,此数组包含用于显示视图中每个字段的配置,如(text titles,maxsize,sortable等)和数据库配置喜欢(数据库/表中的列名,数据类型等)在同一个数组中,并且它的工作正常。

public $tableData = [
    [
        'name' => 'Table1.name',
        'title' => 'Name',
        'field' => 'name',
        'sortable' => true,
        'type' => 'string',
        'size' => '50px',
    ], 
    [
        'name' => 'Asosiation1.option',
        'title' => 'Topic',
        'field' => 'topic_option',
        'sortable' => true,
        'type' => 'string',
        'size' => '150px',
    ],  
    ... More fields and asosiations
]

但是现在,我需要在不同版本中使用这些相同的模型,因为每个模型的数据库/表的结构每年都在变化,但我需要保存/显示与每个版本对应的数据。< / p>

因此,如果用户请求mySite.com/2010,则Site必须使用特定于该年定义的模型数组结构来显示数据。

所以,我创造了:

/插件/年/ version2010

/插件/年/ version2011

等。

在每次插入中,我复制了所有只更改名称空间的模型,defaultConnectionName(每年1个模式)和数组结构。

这会激发在bootstrap配置中加载多个插件。

  

有没有办法只根据请求加载必要的插件?(/ 2010,/ 2011等)。

     

实施例。在bootstrap.php中我为每个插件年做了一次:

     

Plugin :: load('years / version201X',['bootstrap'=&gt; false,'routes'=&gt; true]);

  

有没有办法避免每次执行loadModel()或TableRegistry :: get()时都必须指定插件名称?

     

实施例。在主App AppController中我每次都要做:

     

$这 - &GT; loadModel(的 '岁/ version201X /表1');

或许还有另一种更好的方法可以解决这种情况,我还没有看到

0 个答案:

没有答案