Bake\Shell\Task\ModelTask::getRules PHP Метод

getRules() публичный Метод

Generate default rules checker.
public getRules ( Table $model, array $associations ) : array
$model Cake\ORM\Table The model to introspect.
$associations array The associations for the model.
Результат array The rules to be applied.
    public function getRules($model, array $associations)
    {
        if (!empty($this->params['no-rules'])) {
            return [];
        }
        $schema = $model->schema();
        $fields = $schema->columns();
        if (empty($fields)) {
            return [];
        }
        $rules = [];
        foreach ($fields as $fieldName) {
            if (in_array($fieldName, ['username', 'email', 'login'])) {
                $rules[$fieldName] = ['name' => 'isUnique'];
            }
        }
        foreach ($schema->constraints() as $name) {
            $constraint = $schema->constraint($name);
            if ($constraint['type'] !== SchemaTable::CONSTRAINT_UNIQUE) {
                continue;
            }
            if (count($constraint['columns']) > 1) {
                continue;
            }
            $rules[$constraint['columns'][0]] = ['name' => 'isUnique'];
        }
        if (empty($associations['belongsTo'])) {
            return $rules;
        }
        foreach ($associations['belongsTo'] as $assoc) {
            $rules[$assoc['foreignKey']] = ['name' => 'existsIn', 'extra' => $assoc['alias']];
        }
        return $rules;
    }

Usage Example

Пример #1
0
 /**
  * Tests baking a table with rules
  *
  * @return void
  */
 public function testBakeWithRules()
 {
     $model = TableRegistry::get('Users');
     $associations = ['belongsTo' => [['alias' => 'Countries', 'foreignKey' => 'country_id'], ['alias' => 'Sites', 'foreignKey' => 'site_id']], 'hasMany' => [['alias' => 'BakeComments', 'foreignKey' => 'bake_user_id']]];
     $rulesChecker = $this->Task->getRules($model, $associations);
     $result = $this->Task->bakeTable($model, compact('rulesChecker'));
     $this->assertSameAsFile(__FUNCTION__ . '.php', $result);
 }