eom / plugin-cakephp-loadsubcomponents
Plugin CakePHP 2.x for Load SubComponents in SubFolders.
Fund package maintenance!
Patreon
paypal.me/EOMDesignGroup
Installs: 56
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Type:cakephp-plugin
Requires
- php: >=5.3.0
- cakephp/cakephp: >=2.10
- composer/installers: *
README
Con este componente va a poder crear subdirectorios dentro de tu carpeta Controller/Component/.../ y que sean cargados luego sin la limitacion nativa de CakePHP 2.x respecto a este problema.
1. Instalar con composer:
Edita tu archivo composer.json con los siguientes cambios. https://packagist.org/packages/eom/plugin-cakephp-loadsubcomponents
"extra": { "installer-paths": { "app/Plugin/EOM/{$name}/": ["vendor:eom","type:cakephp-plugin"], "app/Plugin/{$name}/": ["type:cakephp-plugin"] } }
Esto puede variar con su configuracion de CakePHP 2.x y donde configuraron la carpeta vendors para composer.
En mi caso, se tomo la siguiente estructura, si tiene otra estructura ajueste el path correcto dentro del archivo composer.json "app/Plugin/EOM/{$name}/": ["vendor:eom","type:cakephp-plugin"]
Path Tree:
|-> app | |-> Plugin | |-> ... | |-> EOM | |-> LoadSubComponents | |-> ... |-> vendors | |-> bin | |-> composer | |-> ... | |-> autoload.php
2. Configurar bootstrap.php para cargar el plugin
Despues agregué al final del archivo o juntos a los otros plugins que tenga configurado, la siguiente linea dentro del archivo app/Config/bootstrap.php
// Load Plugins ... CakePlugin::load('EOM/LoadSubComponents', array('bootstrap' => false, 'routes' => false));
3. Configurar el component de forma global en el AppController
Como configurar el componente para todo el sistema y cargar otro componentes en una subcarpeta
/** * Application Controller * @property LoadSubComponentsComponent $LoadSubComponents */ class AppController extends Controller { public $components = ['EOM/LoadSubComponents.LoadSubComponents']; }
4. Utilizarlos en un controller cualquier que hereda de AppController
Ejemplo de como utilizar el LoadSubComponents en beforeFilter o una acción.
/** * MiDemo Controller * @property MiFunctionDemo1Component $MiFunctionDemo1 * @property MiFunctionDemo2Component $MiFunctionDemo2 * @property MiFunctionDemo3Component $MiFunctionDemo3 */ class MiDemoController extends AppController { public function beforeFilter() { parent::beforeFilter(); // Load path Controller/Component/SubDirectorios/TestDemoComponent.php $this->TestDemo = $this->LoadSubComponents->Load('SubDirectorios/TestDemo'); // Load path Controller/Component/SubDirectorioX/MiFunctionDemo1Component.php $this->MiFunctionDemo1 = $this->LoadSubComponents->load('SubDirectorioX/MiFunctionDemo1'); $this->MiFunctionDemo3 = $this->LoadSubComponents->load('SubDirectorio/SubX/MiFunctionDemo3'); // Demo1 de como utilizarla $this->MiFunctionDemo1->MiAccion1('Demo'); $this->MiFunctionDemo1->MiAccion2('Demo'); } public function index(){ // TestDemo de como utilizarla echo $this->TestDemo->hello('Hi EOM !!!'); // Load path Controller/Component/SubDirectorioX/MiFunctionDemo2Component.php $this->MiFunctionDemo2 = $this->LoadSubComponents->load('SubDirectorioX/MiFunctionDemo2'); // Demo2 de como utilizarla $this->MiFunctionDemo2->MiAccion1('DemoIndexBla'); // Reutilizar Demo1 load en el __construct $this->MiFunctionDemo1->MiAccion101('DemoIndexBlaBla..'); // Utilizar Demo3 load en el __construct $this->MiFunctionDemo3->MiAccionDemoBla('DemoIndexBlaBla..'); } // ... }