cakephp
cakephp
Chidiebere Chukwudi  

Cakephp plugin Development: using custom component in another component.

In a traditional cakephp app development, I.e, if you are not building a pluigin and want to use a custom component in another component, the cakephp docs say you should simply register the component’s name in a protected property that has an array value of the custom component’s name you want to use, like so : protected $components = ['Existing'];
Lets get to an example:

// src/Controller/Component/CustomComponent.php
namespace App\Controller\Component;

use Cake\Controller\Component;

class CustomComponent extends Component
{
    // The other component your component uses
    protected $components = ['Existing'];

    // Execute any other additional setup for your component.
    public function initialize(array $config): void
    {
        $this->Existing->foo();
    }

    public function bar()
    {
        // ...
    }
}

// src/Controller/Component/ExistingComponent.php
namespace App\Controller\Component;

use Cake\Controller\Component;

class ExistingComponent extends Component
{
    public function foo()
    {
        // ...
    }
}

How about a situation where we want to use a custom component in another component this time, in a cakephp plugin context?
Easy. We can simply do that by prefixing the plugin name before the name of the component like so: protected $components = ['PluginName.Existing'];
Lets get to an example:

// src/Controller/Component/CustomComponent.php
namespace App\Controller\Component;

use Cake\Controller\Component;

class CustomComponent extends Component
{
    // The other component your component uses
    protected $components = ['PluginName.Existing'];

    // Execute any other additional setup for your component.
    public function initialize(array $config): void
    {
        $this->Existing->foo();
    }

    public function bar()
    {
        // ...
    }
}

// src/Controller/Component/ExistingComponent.php
namespace App\Controller\Component;

use Cake\Controller\Component;

class ExistingComponent extends Component
{
    public function foo()
    {
        // ...
    }
}

This same principle applies to helpers, behaviours, etc.

That should be all. This can be confusing sometimes especially in situations where the results you get when you google-search around these concepts often lands you on the traditional cakephp documentation.

Here is the plugin specific documentation for more info.

Also, check out a cakephp plugin for handling cloudinary media uploads I built: Cakephp-cloudinary

I’m on twitter

Leave A Comment