Question

In an effort to keep my code DRY I would like to be able to define "cross controller" variables.

Classic example is that I would like access to some config items that are loaded in my bootstap.

What is the best practise method of achieving this?

Tim

Was it helpful?

Solution

You can always use the Di container.

Once you register a component in the Di it is available in the controller by the magic method. For instance:

// Bootstrap
$configFile = ROOT_PATH . '/app/config/config.ini';

// Create the new object
$config = new \Phalcon\Config\Adapter\Ini($configFile);

// Store it in the Di container
$this->di->setShared('config', $config);

and in your controller it is as simple as:

$config = $this->config;

If you create a base controller class, you can pass those objects in the view if needed like so:

$this->view->setVar('config', $this->config);

Finally the Di container can act also as a registry, where you store items you might want to use in your application.

For an example of bootstrapping and accessing objects in controllers, have a look at the phalcon/website repository. It implements bootstrapping and base controller patterns among other things.

OTHER TIPS

The following is my setup.

[PHP]     5.4.1
[phalcon] 1.2.1

Here is an excerpt from my bootstrap.(/app-root/public/index.php)

    $di = new \Phalcon\DI\FactoryDefault();

    // I'll pass the config to a controller.
    $di->set('config', $config);

    $application = new \Phalcon\Mvc\Application();
    $application->setDI($di);
    echo $application->handle()->getContent();

And this is an excerpt from my base controller.(/app-root/app/controllers/ControllerBase.php)

    class ControllerBase extends Phalcon\Mvc\Controller
    {
            protected $config;

            protected function initialize()
            {
                    $this->config = $this->di->get('config');
                    $appName      = $this->config->application->appName;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top