2017 © Pedro PelΓ‘ez
 

library zfs-domain-model

Alternative DBAL implementation of Zend Framework 2 Zend\Db for ZFStarter

image

zfstarter/zfs-domain-model

Alternative DBAL implementation of Zend Framework 2 Zend\Db for ZFStarter

  • Wednesday, April 1, 2015
  • by farior2109
  • Repository
  • 0 Watchers
  • 2 Stars
  • 62 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 5 Versions
  • 0 % Grown

The README.md

zfs-domain-model

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация слоя доступа ΠΊ рСляционным Π‘Π” Π½Π° основС Zend\Db для ZF2/ZFStarter ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²., (*1)

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

  • ДобавляСм Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ сСрвиса автоматичСского создания Gateway'Π΅Π²:
'service_manager' => array(
    'factories' => array(
        'ZFS\DomainModel\Service' => 'ZFS\DomainModel\Service\Factory'
    )
)

  • ДобавляСм алиас Π½Π° Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π‘Π”:
'service_manager' => array(
    'aliases' => array(
        // допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π‘Π” ΠΊΠ°ΠΊ 'Db\Adapter'
        // Ρ‡Ρ‚ΠΎΠ± ZFS\DomainModel ΠΌΠΎΠ³Π»Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π΄Π΅Π»Π°Π΅ΠΌ алиас:
        'ZFS\DomainModel\Adapter' => 'Db\Adapter'
    )
)

ИспользованиС

ЕдинствСнноС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия: - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ для создания Gateway'Π΅Π²:, (*2)

<?php
namespace Application\Model\Gateway;

use ZFS\DomainModel\Gateway\AbstractFactory as BaseAbstractFactory;

class AbstractFactory extends BaseAbstractFactory
{
    protected $provides = array(
        'UsersGateway' => array(
            'tableName' => 'users'
        )
    );
}
  • И Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эту Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π² настройки ServiceManager'Π°:
'service_manager' => array(
    'abstract_factories' => array(
        'Application\Model\Gateway\AbstractFactory'
    )
)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Gateway Ρ‡Π΅Ρ€Π΅Π· сСрвис Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°):, (*3)

/** @var \ZFS\DomainModel\Gateway\TableGateway $gateway */
$gateway = $this->getServiceLocator()->get('UsersGateway');

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° создала ZFS\DomainModel\Gateway\TableGateway, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 'users', ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ZFS\DomainModel\ResultSet\ResultSet ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ select ΠΈ ZFS\DomainModel\Object\ObjectMagic ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ абстракции строчки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ПослСдний содСрТит магичСскиС __get ΠΈ __set для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ строчки., (*4)

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ использованиС

Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Gateway ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мноТСство ΠΎΠΏΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ZFS\DomainModel\Service\Options:, (*5)

const OPTION_TABLE_GATEWAY        = 'tableGateway';         // имя класса, создаСтся Ρ‡Π΅Ρ€Π΅Π· new
const OPTION_TABLE_NAME           = 'tableName';            // имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, СдинствСнноС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅
const OPTION_ADAPTER              = 'adapter';              // имя, доступноС Ρ‡Π΅Ρ€Π΅Π· ServiceLocator
const OPTION_TABLE_FEATURES       = 'tableFeatures';        // массив ΠΈΠ· ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ΠΎΠ² ***Feature
const OPTION_RESULT_SET_PROTOTYPE = 'resultSetPrototype';   // имя класса, создаСтся Ρ‡Π΅Ρ€Π΅Π· new
const OPTION_OBJECT_PROTOTYPE     = 'objectPrototype';      // имя класса, создаСтся Ρ‡Π΅Ρ€Π΅Π· new
const OPTION_SQL                  = 'sql';                  // имя класса, создаСтся Ρ‡Π΅Ρ€Π΅Π· new

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса ΠΈΠ· ZFS\DomainModel OPTION_OBJECT_PROTOTYPE Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ZFS\DomainModel\Object\ObjectInterface. Помимо интСрфСйса, Π² распоряТСнии программиста Π΅ΡΡ‚ΡŒ ZFS\DomainModel\Object\Object ΠΈ ZFS\DomainModel\Object\ObjectMagic. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:, (*6)

<?php
namespace Application\Model\Object;

use ZFS\DomainModel\Object\Object;

class User extends Object
{
    protected $primaryColumns = array(
        'id'
    );

    public function getId()
    {
        return $this->data['id']; // Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· массива Π΄Π°Π½Π½Ρ‹Ρ…
    }

    public function getName()
    {
        return $this->get('name'); // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ настройку $fieldToColumnMap, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ null Ссли isset($this->data[$name]) == false 
    }
}

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ минималистичСн. Π˜ΡΠΏΠΎΠ»ΡŒΡƒΠ·Π΅Ρ‚ __get ΠΈ __set для доступа ΠΊ полям, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ $this->get() (ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅) ΠΈ $this->set():, (*7)

<?php
namespace Application\Model\Object;

use ZFS\DomainModel\Object\ObjectMagic;

/**
 * @property int    id
 * @property string name
 */
class User extends ObjectMagic
{
    protected $primaryColumns = array(
        'id'
    );
}

PHPDoc @property ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ для Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Π°., (*8)

Π’ ΠΏΠΎΠΌΠΎΡ‰ΡŒ camelCase ΡΡ‚ΠΈΠ»ΡŽ программирования ΠΈ underscore имСнования ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² Π‘Π” ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $fieldToColumnMap:, (*9)

<?php
namespace Application\Model\Object;

use ZFS\DomainModel\Object\ObjectMagic;

/**
 * @property int    id
 * @property string name
 * @property string dateOfBirth
 */
class User extends ObjectMagic
{
    protected $primaryColumns = array(
        'id'
    );

    protected $fieldToColumnMap = array(
        'dateOfBirth' => 'date_of_birth'
    );
}

ΠžΡ‚ΡΠ΅ΡΡ‚ΡŒ лишниС поля Π² массивС $data (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ObjectMagic), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² исходной Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ZFS\DomainModel\Feature\FilterColumnsFeature, просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π² описаниС Gateway:, (*10)

<?php
namespace Application\Model\Gateway;

use ZFS\DomainModel\Feature\FilterColumnsFeature;
use ZFS\DomainModel\Gateway\AbstractFactory as BaseAbstractFactory;
use ZFS\DomainModel\Service\Options;

class AbstractFactory extends BaseAbstractFactory
{
    public function __construct()
    {
        $this->provides['UsersGateway'] = array(
            Options::OPTION_TABLE_NAME       => 'users',
            Options::OPTION_TABLE_FEATURES   => array(new FilterColumnsFeature()),
            Options::OPTION_OBJECT_PROTOTYPE => 'Application\Model\Object\User'
        );
    }
}

Π—Π΄Π΅ΡΡŒ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΠΏΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠ· Options, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пСрСнСсСно Π² конструктор ΠΈΠ·-Π·Π° нСобходимости ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ инстанс FilterColumnsFeature ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Application\Model\Object\User ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅., (*11)

ЛицСнзия

MIT, (*12)

The Versions

01/04 2015

dev-master

9999999-dev

Alternative DBAL implementation of Zend Framework 2 Zend\Db for ZFStarter

  Sources   Download

MIT

The Requires

 

01/04 2015

1.0.3

1.0.3.0

Alternative DBAL implementation of Zend Framework 2 Zend\Db for ZFStarter

  Sources   Download

MIT

The Requires

 

18/09 2014

1.0.2

1.0.2.0

Alternative DBAL implementation of Zend Framework 2 Zend\Db for ZFStarter

  Sources   Download

MIT

The Requires

 

14/04 2014

1.0.1

1.0.1.0

Alternative DB implementation of Zend Framework 2 Zend\Db

  Sources   Download

MIT

The Requires

 

13/04 2014

1.0

1.0.0.0

Alternative DB implementation of Zend Framework 2 Zend\Db

  Sources   Download

MIT

The Requires