diff --git a/src/Generator/templates/Models/basetable.php.twig b/src/Generator/templates/Models/basetable.php.twig index a145a1a..a83fe62 100755 --- a/src/Generator/templates/Models/basetable.php.twig +++ b/src/Generator/templates/Models/basetable.php.twig @@ -1,18 +1,20 @@ {{ related_object.getRemoteVariable }}TableGateway = ${{ related_object.getRemoteVariable }}TableGateway; @@ -63,11 +66,10 @@ abstract class Base{{ class_name }}TableGateway extends AbstractTableGateway $this->faker = $faker; $this->databaseConnector = $databaseConnector; - /** @var $adaptor AdapterInterface */ - // @todo rename all uses of 'adaptor' to 'adapter'. I cannot spell - MB - $this->databaseAdaptor = $this->databaseConnector->getDatabase($this->database); - $resultSetPrototype = new ResultSet(ResultSet::TYPE_ARRAYOBJECT, new $this->model); - return parent::__construct($this->table, $this->databaseAdaptor, null, $resultSetPrototype); + $this->databaseAdapter = $this->databaseConnector->getDatabase($this->database); + $resultSetPrototype = new ResultSet(ResultSet::TYPE_ARRAYOBJECT, new $this->model()); + + return parent::__construct($this->table, $this->databaseAdapter, null, $resultSetPrototype); } /** @@ -90,63 +92,61 @@ abstract class Base{{ class_name }}TableGateway extends AbstractTableGateway {% endif %} {% endfor %} - $new{{ class_name }}Data = [ + return $this->getNewModelInstance([ {% for column in columns|sort %} - // {{ column.getField }}. Type = {{ column.getDbType }}. PHPType = {{ column.getPhpType }}. {% if(column.hasRelatedObjects) %}Has{% else %}Has no{% endif %} related objects. + // {{ column.getField }}. Type = {{ column.getDbType }}. PHPType = {{ column.getPhpType }}. {% if(column.hasRelatedObjects) %}Has{% else %}Has no{% endif %} related objects. {% if column.isAutoIncrement %} {% elseif column.hasRelatedObjects %} {% if class_name|capitalize != column.getRelatedObjects()[0].getRemoteVariable|capitalize %} {% if column.isUnique == false %} - '{{ column.getField }}' => - $random{{ column.getRelatedObjects()[0].getRemoteClass }} instanceof Models\{{ column.getRelatedObjects()[0].getRemoteClass }}Model - ? $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->fetchRandom()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}() - : $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->getNewMockModelInstance()->save()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}(), + '{{ column.getField }}' => + $random{{ column.getRelatedObjects()[0].getRemoteClass }} instanceof Models\{{ column.getRelatedObjects()[0].getRemoteClass }}Model + ? $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->fetchRandom()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}() + : $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->getNewMockModelInstance()->save()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}(), {% else %} - '{{ column.getField }}' => - $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->getNewMockModelInstance()->save()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}(), + '{{ column.getField }}' => $this->{{ column.getRelatedObjects()[0].getRemoteVariable }}TableGateway->getNewMockModelInstance()->save()->{{ column.getRelatedObjects()[0].getRemoteBoundColumnGetter }}(), {% endif %} {% else %} - '{{ column.getField }}' => null, // This is a circular reference - We'd just be creating elements for eternity if we don't stop the madness. + '{{ column.getField }}' => null, // This is a circular reference - We'd just be creating elements for eternity if we don't stop the madness. {% endif %} - {% elseif column.getPhpType == 'int' and 'max_field_length' in column|keys %} - '{{ column.getField }}' => $this->faker->numberBetween(1, {{ 10 ** (column.getMaxLength - 1) < column.getMaxFieldLength ? 10 ** (column.getMaxLength - 1) : column.getMaxFieldLength}}), + '{{ column.getField }}' => $this->faker->numberBetween(1, {{ 10 ** (column.getMaxLength - 1) < column.getMaxFieldLength ? 10 ** (column.getMaxLength - 1) : column.getMaxFieldLength}}), {% elseif column.getPhpType == 'int' %} - '{{ column.getField }}' => $this->faker->numberBetween(1, {{ 10 ** (column.getMaxLength - 2) }}), + '{{ column.getField }}' => $this->faker->numberBetween(1, {{ 10 ** (column.getMaxLength - 2) }}), {% elseif column.getDbType == 'enum' and column.getPhpType == 'string' %} - '{{ column.getField }}' => '{{ column.getPermittedValues()[0] }}', + '{{ column.getField }}' => '{{ column.getPermittedValues()[0] }}', {% elseif column.getDbType == 'datetime' and column.getPhpType == 'string' %} - '{{ column.getField }}' => $this->faker->dateTime()->format("Y-m-d H:i:s"), // @todo: Make datetime fields accept DateTime objects instead of strings. - MB + '{{ column.getField }}' => $this->faker->dateTime()->format("Y-m-d H:i:s"), // @todo: Make datetime fields accept DateTime objects instead of strings. - MB {% elseif column.getPhpType == 'float' %} - '{{ column.getField }}' => $this->faker->randomFloat({{ column.getMaxDecimalPlaces }}, {{ column.isUnsigned ? 0 : -5 }}, 5), + '{{ column.getField }}' => $this->faker->randomFloat({{ column.getMaxDecimalPlaces }}, {{ column.isUnsigned ? 0 : -5 }}, 5), {% elseif column.getMaxLength %} - '{{ column.getField }}' => substr($this->faker->text({{ column.getMaxLength < 500 ? column.getMaxLength : 500 }} >= 5 ? {{ column.getMaxLength < 500 ? column.getMaxLength : 500 }} : 5), 0, {{ column.getMaxLength < 500 ? column.getMaxLength : 500 }}), + '{{ column.getField }}' => substr($this->faker->text({{ column.getMaxLength < 500 ? column.getMaxLength : 500 }} >= 5 ? {{ column.getMaxLength < 500 ? column.getMaxLength : 500 }} : 5), 0, {{ column.getMaxLength < 500 ? column.getMaxLength : 500 }}), {% elseif column.getDbType == 'json' %} - '{{ column.getField }}' => json_encode(${{ column.getField }}Array, JSON_PRETTY_PRINT), + '{{ column.getField }}' => json_encode(${{ column.getField }}Array, JSON_PRETTY_PRINT), {% else %} - 'column.getField' => $this->faker->word, + 'column.getField' => $this->faker->word, {% endif %} {% endfor %} - ]; - $new{{ class_name }} = $this->getNewModelInstance($new{{ class_name }}Data); - return $new{{ class_name }}; + ]); } /** * @param array $data + * * @return Models\{{ class_name }}Model */ - public function getNewModelInstance(array $data = []) + public function getNewModelInstance(array $data = []): Models\{{ class_name }}Model { return parent::getNewModelInstance($data); } /** * @param Models\{{ class_name }}Model $model + * * @return Models\{{ class_name }}Model */ - public function save(Model $model) + public function save(Model $model): Models\{{ class_name }}Model { return parent::save($model); } -} \ No newline at end of file +} diff --git a/src/Generator/templates/Services/baseservice.php.twig b/src/Generator/templates/Services/baseservice.php.twig index 8e2a76f..3c842e8 100755 --- a/src/Generator/templates/Services/baseservice.php.twig +++ b/src/Generator/templates/Services/baseservice.php.twig @@ -4,18 +4,15 @@ namespace {{ namespace }}\Services\Base; use {{ namespace }}\Models; use {{ namespace }}\TableGateways; +use Zend\Db\Sql\Expression; use Zend\Db\Sql\Select; use ⌬\Controllers\Abstracts\Service as AbstractService; use ⌬\Database\Interfaces\ServiceInterface as ServiceInterface; {% include '_overwrite_warning.twig' %} -// @todo: Make all Services implement a ServicesInterface. - MB -abstract class Base{{ class_name }}Service - extends AbstractService - implements ServiceInterface +abstract class Base{{ class_name }}Service extends AbstractService implements ServiceInterface { - // Related Objects Table Gateways {% for related_object in related_objects_shared|sort|unique %} {% if related_object.getRemoteClass != class_name %} @@ -63,8 +60,7 @@ abstract class Base{{ class_name }}Service {% endif %} {% endfor %} TableGateways\{{ class_name }}TableGateway ${{ variable_name }}TableGateway - ) - { + ) { {% for related_object in related_objects_shared|sort|unique %} {% if related_object.getRemoteClass != class_name %} $this->{{ related_object.getRemoteVariable }}TableGateway = ${{ related_object.getRemoteVariable }}TableGateway; @@ -78,22 +74,22 @@ abstract class Base{{ class_name }}Service $this->{{ variable_name }}TableGateway = ${{ variable_name }}TableGateway; } - public function getNewTableGatewayInstance() : TableGateways\{{ class_name }}TableGateway + public function getNewTableGatewayInstance(): TableGateways\{{ class_name }}TableGateway { return $this->{{ variable_name }}TableGateway; } - - public function getNewModelInstance($dataExchange = []) : Models\{{ class_name }}Model + + public function getNewModelInstance($dataExchange = []): Models\{{ class_name }}Model { return $this->{{ variable_name }}TableGateway->getNewModelInstance($dataExchange); } /** - * @param int|null $limit - * @param int|null $offset - * @param array|\Closure[]|null $wheres - * @param string|Expression|null $order - * @param string|null $orderDirection + * @param null|int $limit + * @param null|int $offset + * @param null|array|\Closure[] $wheres + * @param null|Expression|string $order + * @param null|string $orderDirection * * @return Models\{{ class_name }}Model[] */ @@ -103,8 +99,7 @@ abstract class Base{{ class_name }}Service array $wheres = null, $order = null, string $orderDirection = null - ) - { + ) { return parent::getAll( $limit, $offset, @@ -116,12 +111,14 @@ abstract class Base{{ class_name }}Service /** * @param int $id - * @return Models\{{ class_name }}Model|null + * + * @return null|Models\{{ class_name }}Model */ - public function getById(int $id) : ?Models\{{ class_name }}Model + public function getById(int $id): ?Models\{{ class_name }}Model { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->getById($id); } @@ -131,12 +128,13 @@ abstract class Base{{ class_name }}Service * @param $orderBy string Field to sort by * @param $orderDirection string Direction to sort (Select::ORDER_ASCENDING || Select::ORDER_DESCENDING) * - * @return Models\{{ class_name }}Model|null + * @return null|Models\{{ class_name }}Model */ - public function getByField(string $field, $value, $orderBy = null, $orderDirection = Select::ORDER_ASCENDING) : ?Models\{{ class_name }}Model + public function getByField(string $field, $value, $orderBy = null, $orderDirection = Select::ORDER_ASCENDING): ?Models\{{ class_name }}Model { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->getByField($field, $value, $orderBy, $orderDirection); } @@ -146,101 +144,115 @@ abstract class Base{{ class_name }}Service * @param $limit int * @param $orderBy string Field to sort by * @param $orderDirection string Direction to sort (Select::ORDER_ASCENDING || Select::ORDER_DESCENDING) - * @return Models\{{ class_name }}Model[]|null + * + * @return null|Models\{{ class_name }}Model[] */ - public function getManyByField(string $field, $value, int $limit = null, $orderBy = null, $orderDirection = Select::ORDER_ASCENDING) : ?array + public function getManyByField(string $field, $value, int $limit = null, $orderBy = null, $orderDirection = Select::ORDER_ASCENDING): ?array { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->getManyByField($field, $value, $limit, $orderBy, $orderDirection); } /** * @param string $field * @param $value + * * @return int */ - public function countByField(string $field, $value) : int + public function countByField(string $field, $value): int { ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->countByField($field, $value); } /** * @return Models\{{ class_name }}Model */ - public function getRandom() : ?Models\{{ class_name }}Model + public function getRandom(): ?Models\{{ class_name }}Model { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->fetchRandom(); } - /** - * @param Where|\Closure|string|array|Predicate\PredicateInterface $keyValue + * @param array|\Closure|Predicate\PredicateInterface|string|Where $keyValue * @param $orderBy string Field to sort by * @param $orderDirection string Direction to sort (Select::ORDER_ASCENDING || Select::ORDER_DESCENDING) + * * @return Models\{{ class_name }}Model */ - public function getMatching($keyValue = [], $orderBy = null, $orderDirection = Select::ORDER_ASCENDING) : ?Models\{{ class_name }}Model + public function getMatching($keyValue = [], $orderBy = null, $orderDirection = Select::ORDER_ASCENDING): ?Models\{{ class_name }}Model { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->getMatching($keyValue, $orderBy, $orderDirection); } /** - * @param Where|\Closure|string|array|Predicate\PredicateInterface $keyValue + * @param array|\Closure|Predicate\PredicateInterface|string|Where $keyValue * @param $orderBy string Field to sort by * @param $orderDirection string Direction to sort (Select::ORDER_ASCENDING || Select::ORDER_DESCENDING) * @param $limit int Limit the number of matches returned + * * @return Models\{{ class_name }}Model[] */ - public function getManyMatching($keyValue = [], $orderBy = null, $orderDirection = Select::ORDER_ASCENDING, int $limit = null) : ?array + public function getManyMatching($keyValue = [], $orderBy = null, $orderDirection = Select::ORDER_ASCENDING, int $limit = null): ?array { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->getManyMatching($keyValue, $orderBy, $orderDirection, $limit); } /** * @param $dataExchange - * @return array|\ArrayObject|null + * + * @return Models\{{ class_name }}Model */ - public function createFromArray($dataExchange) + public function createFromArray($dataExchange): Models\{{ class_name }}Model { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); ${{ variable_name }} = $this->getNewModelInstance($dataExchange); + return ${{ variable_name }}Table->save(${{ variable_name }}); } /** * @param int $id + * * @return int */ - public function deleteByID($id) : int + public function deleteByID($id): int { /** @var TableGateways\{{ class_name }}TableGateway ${{ variable_name }}Table */ ${{ variable_name }}Table = $this->getNewTableGatewayInstance(); + return ${{ variable_name }}Table->delete(['id' => $id]); } - public function getTermPlural() : string + public function getTermPlural(): string { return '{{ object_name_plural }}'; } - public function getTermSingular() : string + public function getTermSingular(): string { return '{{ object_name_singular }}'; } /** + * Get a version of this object pre-populated with nonsense. + * * @returns Models\{{ class_name }}Model */ - public function getMockObject() + public function getMockObject(): Models\{{ class_name }}Model { return $this->getNewTableGatewayInstance()->getNewMockModelInstance(); } diff --git a/src/Interfaces/TableGatewayInterface.php b/src/Interfaces/TableGatewayInterface.php new file mode 100644 index 0000000..5c8e740 --- /dev/null +++ b/src/Interfaces/TableGatewayInterface.php @@ -0,0 +1,8 @@ +