2013-09-26 187 views
0

我试图弄清楚是否有一种方法可以共享控制器,模型和多个CakePHP应用程序的视图,但如果需要的话,可以覆盖它们中的特定方法。因此,举例来说,如果我有以下结构...CakePHP体系结构

/my_cool_app 
    /core 
    /app 
     /Model 
     Person.php 
     ->findPerson(); 
     ->mapPerson(); 
    /orgs 
    /org_1 
    /app 
     /Model 
     Person.php 
     ->mapPerson(); 

我想什么做的是在org_1 /应用CakePHP的应用程序中使用的所有的控制器,模型,视图等从/核心/应用程序,但是如果文件存在于该结构中(例如org_1/app/Model/Person.php),则提供覆盖任何特定方法的功能。

这是可行的吗?

回答

2

绝对有可能。你的目录,例如:

/your_cool_app 
    /base 
     /app 
      /Model 
       AppModel.php 
       BasePerson.php 
    /inherited 
     /app 
      /Model 
       InherietdPerson.php 

然后继承目录的bootstrap.php中的内部可以使用App::build()告诉应用程序在何处寻找基本模型:

App::build(array(
    'Model' => array(
     //Path to the base models 
     $_SERVER['DOCUMENT_ROOT'] . DS 
      ."your_cool_app" . DS 
       . "base" . DS 
        . "app" . DS 
         . "model" 
    ) 
)); 

的BasePerson将延长AppModel:

<?php 

    App::uses('AppModel', 'Model'); 

    class BasePerson extends AppModel { 

    } 

?> 

而且InheritedPerson扩展BasePerson:

<?php 

    App::uses('AppModel', 'Model'); 

    class InheritedPerson extends BasePerson { 

    } 

?> 

现在来测试是否它的工作只是在继承应用程序创建一个控制器和检查,看看您的应用程序已加载哪些车型:

$this->set('models', App::objects('Model')); 

和视图:

<?php 
    debug($models); 
?> 

它应该打印出如下内容:

array(
    (int) 0 => 'AppModel', //Is in the base app 
    (int) 1 => 'BasePerson', //Is in the base app 
    (int) 2 => 'InheritedPerson' //Is in the inherited app 
) 

检出CakePhp的App class获取更多信息。