mirror of https://github.com/vapor/docs.git
Update the German translation for controller.md (#916)
This commit is contained in:
parent
2ee65b0d42
commit
f6b8e0bfc8
|
|
@ -1,37 +1,13 @@
|
|||
# Controller
|
||||
|
||||
Mit Controller kannst du deinen Code sinnvoll aufteilen und in deinem Projekt für Ordnung sorgen. Ein Controller kann beispielsweise ein oder mehrere Methoden beinhalten, die Serveranfragen entgegennehmen und ein enstprechendes Ergebnis zurückliefern. Das folgende Beispiel zeigt einen möglichen Aufbau eines solchen Controllers:
|
||||
Mit Controller können wir unseren Code sinnvoll aufteilen und in unserem Projekt für Ordnung sorgen. Ein Controller kann eine oder mehrere Methoden beinhalten, die Serveranfragen entgegennehmen, verarbeiten und ein entsprechendes Ergebnis zurückliefern. Das folgende Beispiel zeigt einen möglichen Aufbau eines solchen Controllers:
|
||||
|
||||
```swift
|
||||
/// [TodoController.swift]
|
||||
// [TodosController.swift]
|
||||
|
||||
import Vapor
|
||||
|
||||
struct TodosController: RouteCollection {
|
||||
|
||||
func index(req: Request) async throws -> String {
|
||||
// ...
|
||||
}
|
||||
|
||||
func create(req: Request) throws -> EventLoopFuture<String> {
|
||||
// ...
|
||||
}
|
||||
|
||||
func show(req: Request) throws -> String {
|
||||
guard let id = req.parameters.get("id") else {
|
||||
throw Abort(.internalServerError)
|
||||
}
|
||||
// ...
|
||||
}
|
||||
|
||||
func update(req: Request) throws -> String {
|
||||
// ...
|
||||
}
|
||||
|
||||
func delete(req: Request) throws -> String {
|
||||
// ...
|
||||
}
|
||||
|
||||
func boot(routes: RoutesBuilder) throws {
|
||||
let todos = routes.grouped("todos")
|
||||
todos.get(use: index)
|
||||
|
|
@ -43,15 +19,50 @@ struct TodosController: RouteCollection {
|
|||
todo.delete(use: delete)
|
||||
}
|
||||
}
|
||||
|
||||
func index(req: Request) async throws -> [Todo] {
|
||||
try await Todo.query(on: req.db).all()
|
||||
}
|
||||
|
||||
func create(req: Request) async throws -> Todo {
|
||||
let todo = try req.content.decode(Todo.self)
|
||||
try await todo.save(on: req.db)
|
||||
return todo
|
||||
}
|
||||
|
||||
func show(req: Request) async throws -> Todo {
|
||||
guard let todo = try await Todo.find(req.parameters.get("id"), on: req.db) else {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
return todo
|
||||
}
|
||||
|
||||
func update(req: Request) async throws -> Todo {
|
||||
guard let todo = try await Todo.find(req.parameters.get("id"), on: req.db) else {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
let updatedTodo = try req.content.decode(Todo.self)
|
||||
todo.title = updatedTodo.title
|
||||
try await todo.save(on: req.db)
|
||||
return todo
|
||||
}
|
||||
|
||||
func delete(req: Request) async throws -> HTTPStatus {
|
||||
guard let todo = try await Todo.find(req.parameters.get("id"), on: req.db) {
|
||||
throw Abort(.notFound)
|
||||
}
|
||||
try await todo.delete(on: req.db)
|
||||
return .ok
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Die Methoden sollten immer ein Object vom Typ _Request_ annehmen und ein Wert von Typ _ResponseEncodable_ zurückgegeben. Dabei kann die Methode sowohl asynchron mittels _async/await_ oder _EventLoopFuture_, als auch synchron ausgeführt werden.
|
||||
Die erwähnten Methoden sollten immer ein Objekt vom Typ _Request_ annehmen und ein Wert von Typ _ResponseEncodable_ zurückgegeben. Dabei kann die Methode sowohl asynchron, als auch synchron ausgeführt werden.
|
||||
|
||||
Zum Schluss muss der Controller der Anwendung bekannt gemacht werden. Hierzu wird der Controller mit Hilfe der Methode _register(:_)_ an das Object _app_ übergeben.
|
||||
Zum Schluss müssen wir der Anwendung unseren Controller bekannt machen. Hierzu wird der Controller mit Hilfe der Methode _register(:_)_ an das Objekt _app_ übergeben.
|
||||
|
||||
```swift
|
||||
/// [routes.swift]
|
||||
// [routes.swift]
|
||||
|
||||
try app.register(collection: TodosController())
|
||||
```
|
||||
Loading…
Reference in New Issue