Validación confusa frente a reglas de aplicación en CakePHP3

Múltiples preguntas sobre validación que pueden estar juntas, porque todas están abordando el nuevo concepto de validación en CakePHP 3.

He leído los capítulos (1, 2, 3) en el libro de cocina varias veces, pero sinceramente, no entiendo cómo hacerlo de la manera correcta. También sé que actualmente hay untema / discusión en GitHub sobre la Validación en CakePHP3 que puede abordar el mismo tema.

Los errores de validación se activan, p. con patchEntity. Entonces, creo que es mejor SIEMPRE verificar / mostrar errores ANTES de realizar la acción de guardar:

// src/Controller/UsersController.php
public function add() {
  $user = $this->Users->newEntity();
  if ($this->request->is('post')) {
    $user = $this->Users->patchEntity($user, $this->request->data, ['validate' => 'default'] );
    if ( $user->errors() ) {
      $this->Flash->error('There was a Entity validation error.');
    } else {
      // Optional: Manipulate Entity here, e.g. add some automatic values
      // Be aware: Entity content will not be validated again by default
      if ( $this->Users->save($user) ) {
        $this->Flash->succeed('Saved successfully.');
        return $this->redirect(['controller' => 'Users', 'action' => 'index']);
      } else {
        $this->Flash->error('Not saved - ApplicationRule validation error.');
      }
    }
  }
  $this->set('user', $user);
}

¿Por qué los tutoriales del libro de cocina no hacen uso de$user->errors() antes de guardar los datos? Por lo que yo entiendosave ¿No es necesario llamar si ya hubo un error de validación? Otra forma sería combinar la acción de verificación de errores y guardar:

if ( !$user->errors() && $this->Users->save($user) ) {
  $this->Flash->succeed('Saved successfully.');
  return $this->redirect(['controller' => 'Users', 'action' => 'index']);
} else {
  $this->Flash->error('There was a validation OR ApplicationRule error.');
}

¿Estás usando esto? ¿Debo usarlo? O si no, ¿por qué no?

¿Por qué CakePHP muestra los errores de validación incluso si NO uso$user->errors() en el controlador, como en todos los ejemplos de libros de cocina? pensésave NO comprobará la validación de la entidad?

Ejemplo: isUnique

De acuerdo con lalibro de cocina "Garantizar la unicidad del correo electrónico" es un caso de uso para las reglas de aplicación.

// src/Model/Table/UsersTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\ORM\RulesChecker;
use Cake\ORM\Rule\IsUnique;
// Application Rules
public function buildRules(RulesChecker $rules) {
  $rules->add($rules->isUnique(['email'], 'This email is already in use'));
  return $rules;
}

El error solo se activaría con unsave-llamar en el controlador. Pero también es posible verificar la unicidad en la validación. ¿Por qué es mejor NO hacerlo de esta manera?

// src/Model/Table/UserTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
public function validationDefault(Validator $validator) {
  $validator
    ->add('email', [
      'unique' => [
        'rule' => 'validateUnique',
        'provider' => 'table',
        'message' => 'This email is already in use'
        ],
      ])
  return $validator;
}

Si puedo agregar ApplicationRule en la Validación, ¿por qué debería / debería usar ApplicationRules?

¿Cómo puedo definir en la Regla de aplicación CUANDO la regla debe aplicarse solo en una acción específica (no todas las llamadas de creación / actualización)?

Tampoco veo ni entiendo el beneficio de los dos estados de validación separados cuando la entidad se manipula después delpatchEntity-llamada.

En caso de que agregue algunos valores automáticamente a la entidad, quiero asegurarme de que todos los valores sigan siendo válidos antes de guardarlos en la base de datos (como en CakePHP2). Entonces supongo que es mejor / nessecarySIEMPRE Uso de la validación como reglas de aplicación?!

¿Cómo manejas esto en general? ¿Hay otros ejemplos disponibles para mostrar / demostrar el beneficio y algunos casos de uso de las Regulaciones de Validación vs. Aplicación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta