2017-04-19 1 views
0

양식 데이터를 beego에 제출하고 데이터베이스에 저장하려고합니다. 그리고 몇 가지 질문을하십시오 :Beego에서 양식 제출을 처리하는 올바른 방법은 무엇입니까?

  • 어떻게 핸들 요청을 수정하여 객체로 변환 할 수 있습니까?
  • 요청 또는 변형 된 객체의 유효성을 검사해야합니까?

내 컨트롤러 액션 :

func (c *ServicesController) Edit() { 
    var err error 
    var id, _ = c.GetUint64(":id") 
    var serviceModel = models.Service{} 
    var service models.Service 

    service, err = serviceModel.FindById(id) 

    c.Data["Service"] = service 

    if err == orm.ErrNoRows || err == orm.ErrMissPK { 
     c.Abort("404") 
    } 

    if c.Ctx.Input.IsPost() { 
     err = nil 
     if err := c.ParseForm(&service); err != nil { 
      c.Abort("500") 
     } 

     serviceModel.CreateOrUpdate(service) 
    } 

    c.TplName = "services/edit.html" 
} 

모델 :

type Service struct { 
    Id  uint64 `form:"-"` 
    Name  string `orm:"size(100)" valid:"Required; MaxSize(100)" form:"name"` 
} 

func init() { 
    orm.RegisterModel(new(Service)) 
} 

func (s *Service) FindById(id uint64) (Service, error) { 
    o := orm.NewOrm() 
    service := Service{Id: id} 
    err := o.Read(&service) 

    return service, err 
} 

func (s *Service) CreateOrUpdate(service Service) { 
    o := orm.NewOrm() 
    o.InsertOrUpdate(&service) 
} 

하지만 내가 더 id 필드가 없기 때문에 어쨌든 새로운 객체를 생성 (InsertOrUpdate로) 양식을 제출려고 할 때 양식에서 (ID 매개 변수에서 경로에서 객체를 검색하기 때문에). 어쨌든 양식에 이드를 전달해야할까요, 아니면 어떻게 해킹할까요? 양식 구문 분석 후

답변

1

는 그냥 ID를 추가 beego의 소스를 통해 찾고

if err := c.ParseForm(&service); err != nil { 
    c.Abort("500") 
} 
service.Id = id 

을, 당신이 할 수 생각 :

if c.Ctx.Input.IsPost() { 
    c.Input().Add("id", id) 
    err = nil 
    if err := c.ParseForm(&service); err != nil { 
     c.Abort("500") 
    } 

    serviceModel.CreateOrUpdate(service) 
} 

을하지만하지 않으면, 난 그냥 재구성 것이다 당신의 조금 코드 :

func (c *ServicesController) Edit() { 
    var id, _ = c.GetUint64(":id") 
    var service models.Service{} 
    var serviceModel = models.Service{} 
    var err error 

    if c.Ctx.Input.IsPost() { 
     if err = c.ParseForm(&service); err != nil { 
      c.Abort("500") 
     } 
     service.Id = id 
     serviceModel.CreateOrUpdate(service) 
    } else { 
     service, err = serviceModel.FindById(id) 
     if err == orm.ErrNoRows || err == orm.ErrMissPK { 
     c.Abort("404") 
    } 

    c.Data["Service"] = service 
    c.TplName = "services/edit.html" 
} 
+0

나도 생각하지만 못생긴가요? 데이터베이스에서 객체를 가져 와서 양식 데이터를 적용합니다. 왜 양식에없는 ID를 대체합니까? –

+0

당신은'ParseForm' 메서드를 보여 주어야합니다. 왜 그것을 덮어 쓰는 지 전혀 모릅니다. – dave

+0

그것은 내 것이 아니고, beego에서 가져 왔습니다. –

관련 문제