163 lines
5.3 KiB
Twig
163 lines
5.3 KiB
Twig
{#
|
|
/**
|
|
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
|
|
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
|
*
|
|
* Licensed under The MIT License
|
|
* For full copyright and license information, please see the LICENSE.txt
|
|
* Redistributions of files must retain the above copyright notice.
|
|
*
|
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
|
* @link https://cakephp.org CakePHP(tm) Project
|
|
* @since 2.0.0
|
|
* @license https://www.opensource.org/licenses/mit-license.php MIT License
|
|
*/
|
|
#}
|
|
{% set annotations = DocBlock.buildTableAnnotations(associations, associationInfo, behaviors, entity, namespace) %}
|
|
{% set generatedFunctions = ['initialize'] %}
|
|
{{ element('Bake.file_header', {
|
|
namespace: fileBuilder.namespace,
|
|
classImports: fileBuilder.classImports(['Cake\\ORM\\Query\\SelectQuery', 'Cake\\ORM\\RulesChecker', 'Cake\\ORM\\Table', 'Cake\\Validation\\Validator']),
|
|
}) }}
|
|
|
|
{{ DocBlock.classDescription(name, 'Model', annotations)|raw }}
|
|
class {{ name }}Table extends Table{{ fileBuilder.classBuilder.implements ? ' implements ' ~ fileBuilder.classBuilder.implements|join(', ') : '' }}
|
|
{
|
|
{% set userConstants = fileBuilder.classBuilder.userConstants([]) %}
|
|
{% if userConstants %}
|
|
{{~ Bake.concat('\n\n', userConstants) }}
|
|
|
|
{% endif %}
|
|
{% set userProperties = fileBuilder.classBuilder.userProperties([]) %}
|
|
{% if userProperties %}
|
|
{{~ Bake.concat('\n\n', userProperties) }}
|
|
|
|
{% endif %}
|
|
/**
|
|
* Initialize method
|
|
*
|
|
* @param array<string, mixed> $config The configuration for the Table.
|
|
* @return void
|
|
*/
|
|
public function initialize(array $config): void
|
|
{
|
|
parent::initialize($config);
|
|
|
|
{% if table %}
|
|
$this->setTable('{{ table }}');
|
|
{% endif %}
|
|
|
|
{%- if displayField %}
|
|
$this->setDisplayField({{ (displayField is iterable ? Bake.exportArray(displayField) : Bake.exportVar(displayField))|raw }});
|
|
{% endif %}
|
|
|
|
{%- if primaryKey %}
|
|
{%- if primaryKey is iterable and primaryKey|length > 1 %}
|
|
$this->setPrimaryKey({{ Bake.exportArray(primaryKey)|raw }});
|
|
{{- "\n" }}
|
|
{%- else %}
|
|
$this->setPrimaryKey('{{ primaryKey|as_array|first }}');
|
|
{{- "\n" }}
|
|
{%- endif %}
|
|
{% endif %}
|
|
|
|
{%- if behaviors %}
|
|
|
|
{% endif %}
|
|
|
|
{%- for behavior, behaviorData in behaviors %}
|
|
$this->addBehavior('{{ behavior }}'{{ (behaviorData ? (", " ~ Bake.exportArray(behaviorData, 2)|raw ~ '') : '')|raw }});
|
|
{% endfor %}
|
|
|
|
{%- if associations.belongsTo or associations.hasMany or associations.belongsToMany %}
|
|
|
|
{% endif %}
|
|
|
|
{%- for type, assocs in associations %}
|
|
{%- for assoc in assocs %}
|
|
{%- set assocData = [] %}
|
|
{%- for key, val in assoc %}
|
|
{%- if key is not same as('alias') %}
|
|
{%- set assocData = assocData|merge({(key): val}) %}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
$this->{{ type }}('{{ assoc.alias }}', {{ Bake.exportArray(assocData, 2)|raw }});
|
|
{{- "\n" }}
|
|
{%- endfor %}
|
|
{% endfor %}
|
|
}
|
|
{{- "\n" }}
|
|
|
|
{%- if validation %}
|
|
{% set generatedFunctions = generatedFunctions|merge(['validationDefault']) %}
|
|
|
|
/**
|
|
* Default validation rules.
|
|
*
|
|
* @param \Cake\Validation\Validator $validator Validator instance.
|
|
* @return \Cake\Validation\Validator
|
|
*/
|
|
public function validationDefault(Validator $validator): Validator
|
|
{
|
|
{% for field, rules in validation %}
|
|
{% set validationMethods = Bake.getValidationMethods(field, rules) %}
|
|
{% if validationMethods %}
|
|
$validator
|
|
{% for validationMethod in validationMethods %}
|
|
{% if loop.last %}
|
|
{% set validationMethod = validationMethod ~ ';' %}
|
|
{% endif %}
|
|
{{ validationMethod|raw }}
|
|
{% endfor %}
|
|
|
|
{% endif %}
|
|
{% endfor %}
|
|
return $validator;
|
|
}
|
|
{% endif %}
|
|
|
|
{%- if rulesChecker %}
|
|
{% set generatedFunctions = generatedFunctions|merge(['buildRules']) %}
|
|
|
|
/**
|
|
* Returns a rules checker object that will be used for validating
|
|
* application integrity.
|
|
*
|
|
* @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
|
|
* @return \Cake\ORM\RulesChecker
|
|
*/
|
|
public function buildRules(RulesChecker $rules): RulesChecker
|
|
{
|
|
{% for field, rule in rulesChecker %}
|
|
{% set fields = rule.fields is defined ? Bake.exportArray(rule.fields) : Bake.exportVar(field) %}
|
|
{% set options = '' %}
|
|
{% for optionName, optionValue in rule.options %}
|
|
{%~ set options = (loop.first ? '[' : options) ~ "'#{optionName}' => " ~ Bake.exportVar(optionValue) ~ (loop.last ? ']' : ', ') %}
|
|
{% endfor %}
|
|
$rules->add($rules->{{ rule.name }}({{ fields|raw }}{{ (rule.extra|default ? ", '#{rule.extra}'" : '')|raw }}{{ (options ? ', ' ~ options : '')|raw }}), ['errorField' => '{{ field }}']);
|
|
{% endfor %}
|
|
|
|
return $rules;
|
|
}
|
|
{% endif %}
|
|
|
|
{%- if connection is not same as('default') %}
|
|
{% set generatedFunctions = generatedFunctions|merge(['defaultConnectionName']) %}
|
|
|
|
/**
|
|
* Returns the database connection name to use by default.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function defaultConnectionName(): string
|
|
{
|
|
return '{{ connection }}';
|
|
}
|
|
{% endif %}
|
|
{% set userFunctions = fileBuilder.classBuilder.userFunctions(generatedFunctions) %}
|
|
{% if userFunctions %}
|
|
|
|
{{~ Bake.concat('\n\n', userFunctions) }}
|
|
{% endif %}
|
|
}
|