Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update of custom validator documentation in Spanish #1052

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 0 additions & 45 deletions docs/basics/errors.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
52 changes: 49 additions & 3 deletions docs/basics/validation.es.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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|
|-|-|-|
Expand All @@ -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.

Expand Down Expand Up @@ -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
}
)
}
}
```
3 changes: 2 additions & 1 deletion docs/basics/validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -294,14 +294,15 @@ 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:

- 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] = [
Expand Down
Loading