From a0ec345aab38a5ed8676f8db1d06dff1db4dbeb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=20Mohamad=20=E2=8C=98?= Date: Wed, 15 Jan 2025 23:29:57 +0100 Subject: [PATCH] Update of custom validator documentation in Spanish (#1052) Update of custom validator documentation in Spanish from the issue #1041. --------- Co-authored-by: TheHandyOwl <24987271+TheHandyOwl@users.noreply.github.com> --- docs/basics/errors.es.md | 45 ------------------------------- docs/basics/validation.es.md | 52 +++++++++++++++++++++++++++++++++--- docs/basics/validation.md | 3 ++- 3 files changed, 51 insertions(+), 49 deletions(-) diff --git a/docs/basics/errors.es.md b/docs/basics/errors.es.md index 58b87246b..7153006cf 100644 --- a/docs/basics/errors.es.md +++ b/docs/basics/errors.es.md @@ -136,51 +136,6 @@ struct MyError: DebuggableError { `DebuggableError` tiene otras propiedades como `possibleCauses` y `suggestedFixes` que puedes usar para mejorar la depuración de tus errores. Echa un vistazo al protocolo para más información. -## Stack Traces (Trazas de Pila) - -Vapor incluye soporte para visualizar stack traces para errores normales y crashes de Swift. - -### Swift Backtrace - -Vapor usa la librería de [SwiftBacktrace](https://github.com/swift-server/swift-backtrace) para proporcionar stack traces después de un error crítico (fatal error) o comprobaciones (assertion) en Linux. Para que esto funcione, tu app debe incluir símbolos de depuración (debug symbols) durante la compilación. - -```sh -swift build -c release -Xswiftc -g -``` - -### Trazas de Error - -Por defecto, `Abort` capturará el stack trace actual al inicializarse. Tus tipos de errores personalizados pueden conseguir esto conformándose con `DebuggableError` y guardando `StackTrace.capture()`. - -```swift -import Vapor - -struct MyError: DebuggableError { - var identifier: String - var reason: String - var stackTrace: StackTrace? - - init( - identifier: String, - reason: String, - stackTrace: StackTrace? = .capture() - ) { - self.identifier = identifier - self.reason = reason - self.stackTrace = stackTrace - } -} -``` - -Cuando el [nivel de registro](logging.es.md#nivel) de tu app se establece a `.debug` o inferior, stack traces de errores se incluirán en los registros. - -Los stack traces no serán capturados cuando el nivel de registro sea mayor que `.debug`. Para sobrescribir este comportamiento, establece `StackTrace.isCaptureEnabled` manualmente en `configure`. - -```swift -// Siempre captura stack traces, sin importar el nivel de registro. -StackTrace.isCaptureEnabled = true -``` - ## Middleware de Error `ErrorMiddleware` es el único middleware añadido a tu aplicación por defecto. Este middleware transforma errores de Swift que hayan sido lanzados o devueltos por tus controladores de rutas en respuestas HTTP. Sin este middleware, los errores lanzados darían lugar al cierre de la conexión sin una respuesta. diff --git a/docs/basics/validation.es.md b/docs/basics/validation.es.md index 9cfbb7e82..122514006 100644 --- a/docs/basics/validation.es.md +++ b/docs/basics/validation.es.md @@ -1,6 +1,6 @@ # Validación -La API Validation de Vapor te ayuda a validar peticiones entrantes antes de usar la API [Content](content.md) para decodificar datos. +La API Validation de Vapor te ayuda a validar el cuerpo y los parámetros de consulta de una solicitud entrante antes de usar la API [Content](content.md) para decodificar datos. ## Introducción @@ -220,7 +220,7 @@ Debajo tienes una lista de los validadores soportados actualmente y una breve ex |`.range(_:)`|El valor se encuentra en el `Range` (rango) proporcionado.| |`.url`|Contiene una URL válida.| -Los validadores también pueden combinarse mediante operadores para construir validaciones complejas. +Los validadores también pueden combinarse mediante operadores para construir validaciones complejas. Más información sobre el validador `.custom` en [[#Validadores Personalizados]]. |Operador|Posición|Descripción| |-|-|-| @@ -230,7 +230,11 @@ Los validadores también pueden combinarse mediante operadores para construir va ## Validadores Personalizados -Crear un validador personalizado para códigos postales te permite extender la funcionalidad del marco de validación. En esta sección, te guiaremos a través de los pasos para crear un validador personalizado que valide códigos postales. +Hay dos formas de crear validadores personalizados. + +### Extendiendo la API Validation + +Extendiendo la API Validation es la mejor opción para los casos en los que planees utilizar el validador personalizado en más de un objeto `Content`. En esta sección, te guiaremos por los pasos para crear un validador personalizado para validar códigos postales. Primero, crea un nuevo tipo para representar los resultados de la validación de `ZipCode`. Esta estructura será responsable de informar si una cadena dada es un código postal válido. @@ -287,3 +291,45 @@ Ahora que has definido el validador personalizado `zipCode`, puedes usarlo para ```swift validations.add("zipCode", as: String.self, is: .zipCode) ``` + +### Validador `Custom` + +El validador `Custom` es el más adecuado para los casos en los que deseas validar una propiedad en un solo objeto `Content`. Esta implementación tiene las siguientes dos ventajas en comparación con la extensión de la API Validation: + +- Lógica de validación personalizada más sencilla de implementar. +- Sintaxis más corta. + +En esta sección, te guiaremos a través de los pasos para crear un validador personalizado para verificar si un empleado es parte de nuestra empresa mirando la propiedad `nameAndSurname`. + +```swift +let allCompanyEmployees: [String] = [ + "Everett Erickson", + "Sabrina Manning", + "Seth Gates", + "Melina Hobbs", + "Brendan Wade", + "Evie Richardson", +] + +struct Employee: Content { + var nameAndSurname: String + var email: String + var age: Int + var role: String + + static func validations(_ validations: inout Validations) { + validations.add( + "nameAndSurname", + as: String.self, + is: .custom("Validates whether employee is part of XYZ company by looking at name and surname.") { nameAndSurname in + for employee in allCompanyEmployees { + if employee == nameAndSurname { + return true + } + } + return false + } + ) + } +} +``` diff --git a/docs/basics/validation.md b/docs/basics/validation.md index e1484cc6f..78cd7ecfa 100644 --- a/docs/basics/validation.md +++ b/docs/basics/validation.md @@ -294,6 +294,7 @@ Now that you've defined the custom `zipCode` validator, you can use it to valida ```swift validations.add("zipCode", as: String.self, is: .zipCode) ``` + ### `Custom` Validator The `Custom` validator is best suited for cases where you want to validate a property in only one `Content` object. This implementation has the following two advantages compared to extending the Validation API: @@ -301,7 +302,7 @@ The `Custom` validator is best suited for cases where you want to validate a pro - Simpler to implement custom validation logic. - Shorter syntax. -In this section, we'll walk you through the steps to create a custom validator for checking whether an employee is part of our company by looking at the `nameAndSurname` property. +In this section, we'll walk you through the steps to create a custom validator for checking whether an employee is part of our company by looking at the `nameAndSurname` property. ```swift let allCompanyEmployees: [String] = [