2012-09-26 16 views
14

Tôi mới làm quen với khung công tác web Symfony 2 và đang gặp khó khăn với nhiệm vụ xác thực rất cơ bản. Tôi có một mô hình tổ chức Post có một thành viên slug, mà tôi sử dụng để tạo liên kết tới bài đăng. Trong Post.orm.yml tôi đã xác định unique: true và muốn bao gồm ràng buộc này làm trình xác thực.Tệp xác thực YML bị bỏ qua

tôi đã tạo ra một tập tin validation.yml:

# src/OwnBundles/BlogpostBundle/Resources/config/validation.yml 

OwnBundles\BlogpostBundle\Entity\Post: 
    properties: 
     slug: 
      - NotBlank: ~ 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: slug 

Chức năng sáng tạo trong điều khiển của tôi khá đơn giản:

public function addAction(Request $request) 
{ 
    $post = new Post(); 
    $form = $this->createForm(new PostType(), $post); 

    if($request->getMethod() == 'POST') 
    { 
     $form->bind($request); 
     if($form->isValid()) 
     { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($post); 
      $em->flush(); 
      return $this->redirect(
       $this->generateUrl('own_bundles_blogpost_homepage') 
      ); 
     } 
    } 
    return $this->render(
     'OwnBundlesBlogpostBundle:Default:add.html.twig', 
     array(
      'title' => 'Add new blogpost', 
      'form' => $form->createView(), 
     ) 
    ); 
} 

Các pageflow cơ bản hoạt động tốt, tôi có thể thêm bài viết và nhìn thấy chúng, nhưng nếu tôi sao chép tiêu đề bài đăng để kiểm tra xác thực của tôi, nó sẽ đưa ra một ngoại lệ: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'. Tôi đã quét qua tài liệu trong một thời gian, nhưng tôi không thể tìm ra lý do tại sao số $form->isValid() của mình trả về true.

Trả lời

33

Bạn đã bật xác thực trong app/config/config.yml chưa?

... 

framework: 
    ... 
    validation: { enabled: true } 
    ... 

... 

và nếu bạn muốn xác định xác nhận với các chú thích quá, bạn phải cho phép cả hai xác nhận và chú thích xác nhận:

... 

framework: 
    ... 
    validation: { enabled: true, enable_annotations: true } 
    ... 

... 

Và sau đó đừng quên xóa thư mục app/cache.

+1

config.yml của tôi nói: 'framework: validation: {enable_annotations: true}'; tôi giả định điều này cho phép xác nhận - và tôi đã sai ... Cảm ơn sự giúp đỡ nhanh chóng, tôi không biết tại sao tôi không thể tìm thấy điều này. – nijansen

+0

Bạn phải sử dụng cả hai tham số nếu bạn muốn sử dụng chú thích. Tôi đã chỉnh sửa câu trả lời của mình. – AlterPHP

+0

Cảm ơn, tôi đã cập nhật cấu hình của mình cho phù hợp. Bây giờ nó hoạt động như một sự quyến rũ. – nijansen

Các vấn đề liên quan