CakePHP体系结构

CakePHP体系结构,php,cakephp,directory-structure,Php,Cakephp,Directory Structure,我试图找出是否有一种方法可以共享多个CakePHP应用程序的控制器、模型和视图,但如果需要,可以覆盖其中的特定方法。例如,如果我有以下结构 /my_cool_app /core /app /Model Person.php ->findPerson(); ->mapPerson(); /orgs /org_1 /app /Model Person.php

我试图找出是否有一种方法可以共享多个CakePHP应用程序的控制器、模型和视图,但如果需要,可以覆盖其中的特定方法。例如,如果我有以下结构

/my_cool_app
  /core
    /app
      /Model
        Person.php
        ->findPerson();
        ->mapPerson();
  /orgs
    /org_1
     /app
       /Model
         Person.php
         ->mapPerson();
我想做的是让org_1/app中的CakePHP应用程序使用/core/app中的所有控制器、模型、视图等,但如果文件存在于该结构中(例如,org_1/app/Model/Person.php),则提供覆盖任何特定方法的能力


这可行吗?

绝对可能。您的目录如下:

/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 {

    }

?>
以及以下观点:

<?php
    debug($models); 
?>
查看CakePhp了解更多信息

$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
)