2017 © Pedro Peláez
 

library cake-database-module

cakephp/database module for Ray.Di

image

ray/cake-database-module

cakephp/database module for Ray.Di

  • Friday, April 27, 2018
  • by koriym
  • Repository
  • 4 Watchers
  • 4 Stars
  • 251 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 4 Versions
  • 0 % Grown

The README.md

Ray.CakeDbModule

This is the CakePHP Database Module for Ray.Di, (*1)

Installation

Composer install

$ composer require ray/cake-database-module

Module install

You can Inject the database Connection instance to any class this way:, (*2)

use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new CakeDbModule('sqlite:///'));

        // or
        $this->install(new CakeDbModule('mysql://root@localhost/cake_db'));
    }
}

That will create inject instances of Cake\Database\Connection with the SQLite driver using the memory database or connect to the localhost mysql using the root credentials., (*3)

You can also be more specific and pass a configuraiton array as Cake\Database\Connection would accept it:, (*4)

use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $config = [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'username' => 'root',
            'password' => 'root',
            'database' => 'cake'
        ];
        $this->install(new CakeDbModule($config));
    }
}

Finally you can rely on already configured connections in cake's ConnectionManager and inject connections by name:, (*5)

ConnectionManager::config('default', $config);
use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new CakeDbModule('default'));
    }
}

DI trait

You can inject the connection instance on any class by using the Ray\CakeDbModule\DatabaseInject trait:, (*6)

use Ray\CakeDbModule\DatabaseInject;

class MyThing
{
    use DatabaseInject;
}

This will make the methods getDbConnection() and setDbConnection() available in your class and will automatically inject the Connection instance when MyThing is instantiated using the Injector., (*7)

Wrapping methods inside a transaction

You can make any method run inside a transaction by using the @Transactional annotation. This is handy for saving operations:, (*8)

use DateTime;
use Ray\CakeDbModule\Annotation\Trasactional;
use Ray\CakeDbModule\DatabaseInject;

class MyThing
{
    use DatabaseInject;

    /**
     * This will run inside a new transaction
     *
     * @Transactional
     */
    public function storeSomething()
    {
        $this->db->insert(
            'posts',
            ['name' => 'First', 'show_on' => new DateTime('+3 days')],
            ['created' => 'datetime']
        );
    }
}

Demo

$ php docs/demo/run.php
// It works!

Requirements

  • PHP 5.4+
  • hhvm

The Versions

27/04 2018

dev-master

9999999-dev

cakephp/database module for Ray.Di

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

cakephp dbal ray.di module

27/04 2018

1.0.1

1.0.1.0

cakephp/database module for Ray.Di

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

cakephp dbal ray.di module

04/05 2015

1.0.0

1.0.0.0

cakephp/database module for Ray.Di

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

cakephp dbal ray.di module

30/03 2015

0.1.0

0.1.0.0

cakephp/database module for Ray.Di

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

cakephp dbal ray.di module