Go Gin&Gorm: 경로 모델 바인딩
5100 단어 webdevprogramminggo
일상 업무에서 PHP와 Laravel을 사용하고 있습니다. 제가 정말 좋아하고 도움이 되는 기능 중 하나는 "Route Model Binding"입니다.
기본적으로 경로를 정의하고 경로에
Model
를 추가하기만 하면 됩니다.Go를 사용하면 실제로 우리의 필요에 맞는 것을 구축해야 합니다.
Laravel Route Model Binding에서 영감을 받아 이를 달성하는 데 도움이 되는 Gin용 미들웨어를 구축했으며 컨트롤러에서 존재하지 않는 경우 수행
Find
한 다음 반환error
할 필요가 없습니다. 다른 레이어로 추출했습니다.레포Middleware - sethsandaru/go-route-model-binding
실제로 좋아하거나 사용하려는 경우 ⭐를 주세요 💖
특징
예:
users/:user
=> User
모델 인스턴스 찾기c.Set
를 통해 Gin의 컨텍스트에 바인딩합니다그것은 확실히 우리의 삶을 더 쉽게 만듭니다, 그렇지 않나요? 컨트롤러에서 "레코드 찾기, 존재하지 않음/오류 => 404 반환"과 같은 작업을 싫어합니다. 재미도 없고 컨트롤러의 메서드를 조금 더 길게 만들기 때문입니다.
매핑 - 명시적 바인딩
Laravel의 방식만큼 똑똑하지 않기 때문입니다. 경로 매개변수를 gORM 모델과 매핑하려면 맵을 정의해야 합니다.
var routeModelMapping = map[string]modelMapping{
"entity": makeModelMapping(&models.Entity{}, "uuid"),
"user": makeModelMapping(&model.User{}, "uuid"),
// ...
}
컨트롤러에서 액세스
저는 컨트롤러라는 용어를 좋아하고 모든 애플리케이션에서 항상 MVC를 사용합니다.
func (controller *entityController) Show(c *gin.Context) {
entity, _ := c.Get("entity")
respondOk(c, entity)
}
func (controller *userController) Show(c *gin.Context) {
user, _ := c.Get("user")
respondOk(c, user)
}
올바른 유형을 얻으려면 typeAssertion - 가이드를 수행해야 합니다here.
결론
find
및 check exists
를 추출했습니다.여러분도 저처럼 좋아하셨으면 좋겠습니다 히히.
다시 한 번 여기 저장소Middleware - sethsandaru/go-route-model-binding가 있습니다.
실제로 좋아하거나 사용하려는 경우 ⭐를 주세요 💖
내 오픈 소스 프로젝트에서 해당 미들웨어를 사용하고 있습니다(WIP) Pheasant - Dynamic CRUD Management.
즐거운 주말 보내시고 행복한 고코딩 되세요!
Reference
이 문제에 관하여(Go Gin&Gorm: 경로 모델 바인딩), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sethsandaru/go-gingorm-route-model-binding-3fpp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)