2009-04-11 28 views
8

Tôi đã là một nhà phát triển PHP trong một thời gian nhưng cho đến hôm nay tôi không tìm thấy một cách đơn giản để xử lý (còn gọi là chuẩn hóa, khử trùng, xác nhận, điền và hiển thị biểu mẫu và các lỗi trường tương ứng).Làm cách nào để đơn giản hóa việc xử lý biểu mẫu bằng PHP?

Tôi biết rằng hầu hết các khung công tác PHP ngày nay làm cho công việc này dễ dàng hơn nhưng bằng cách nào đó tôi không cảm thấy như chuyển tất cả mã của tôi sang một trong các khung này và tôi không thể hiểu được cách xác thực biểu mẫu được triển khai trong Django Ví dụ (tôi biết, đó là Python nhưng tôi thực sự thích cách tiếp cận của họ), vì vậy tôi mặc dù cách tốt nhất để tôi đăng bài ở đây là cách tôi xử lý một biểu mẫu đơn giản và có thể các bạn có thể chỉ cho tôi theo hướng tốt nhất.

<?php 

// sample controller 
class _sample extends framework 
{ 
    // sample action 
    function contact() 
    { 
     if ($this->Is->Post() === true) 
     { 
      $errors = array(); 

      if ($this->Is->Set($_POST['name']) === false) 
      { 
       $errors['name'] = 'Please fill in your name.'; 
      } 

      if (($this->Is->Email($_POST['email']) === false) || ($this->Is->Set($_POST['email']) === false)) 
      { 
       $errors['email'] = 'Please fill in your email address.'; 
      } 

      if (($this->Is->Phone($_POST['contact']) === false) && ($this->Is->Mobile($_POST['contact']) === false)) 
      { 
       $errors['contact'] = 'Please fill in your phone (or cell phone) number.'; 
      } 

      if ($this->Is->Set($_POST['message']) === false) 
      { 
       $errors['message'] = 'Please type a message'; 
      } 

      // no errors, it's valid! 
      if (empty($errors) === true) 
      { 
       // do stuff and redirect to "success"/"thank you" page 
      } 

      // load the form view, and let it display the errors 
      // automatically prefill fields with $_POST values 
      else 
      { 
       $this->View('contact_form', $errors); 
      } 
     } 

     // load the form view for the first time 
     else 
     { 
      $this->View('contact_form'); 
     } 
    } 
} 

?> 

Như bạn có thể thấy, đây được coi là một hình thức liên lạc đơn giản tuy nhiên phải mất cuộc sống ra khỏi tôi để xác nhận nó, tôi đã được tìm kiếm vào một số mẫu thiết kế (Observer, Nhà máy) nhưng tôi không cảm thấy tự tin nếu và bằng cách nào tôi nên thực hiện chúng.

+0

Nếu bạn cảm thấy như bạn có thời gian, bạn có thể xem cách Django làm điều đó! –

Trả lời

1

Bạn có thể tạo lớp cơ sở trừu tượng cho tất cả biểu mẫu, lớp cho kiểu trường và lớp tĩnh chỉ để xác thực giá trị của các loại khác nhau (validateString, validateHtml, validateEmail, validateNumber, date, v.v.)). Xác định biểu mẫu của bạn, bạn sẽ định nghĩa các đối tượng trường nào sẽ sử dụng, vì vậy phương thức Form-> validate() sẽ gọi Field-> validate() và trả về giá trị đã lọc hoặc thông báo lỗi. Chỉ định các thông báo lỗi mặc định cho các trường, nhưng đưa ra một tùy chọn để ghi đè nó khi xác định các trường trong lớp biểu mẫu của bạn.

Ồ, và để lại điều $ _POST đó. Đọc bài viết một lần, vượt qua nó một lần để xác nhận biểu mẫu và sau đó làm việc trên các giá trị trường được lọc. Một điều nữa là có nhiều cách khác nhau để đạt được xác nhận biểu mẫu tùy thuộc vào nhu cầu của bạn và kiến ​​trúc của ứng dụng của bạn, khó có thể làm cho trình xác nhận biểu mẫu đa mục đích khi bạn có các cách tiếp cận khác nhau cho thiết kế ứng dụng của mình. Chọn một cách để thực hiện công việc của bạn và gắn bó với nó (bất kể nếu nó sẵn sàng để đi khung hoặc mã của riêng bạn), hoặc bất kỳ siêu duper-form-xác nhận bạn viết, nó sẽ không có ý nghĩa trong các dự án sau này.

Một điều nữa: như Django? Tốt! Vì vậy, bắt đầu lập trình Python ở Django, bạn sẽ thực sự thay đổi cách suy nghĩ làm thế nào để hoàn thành công việc của bạn.

+0

JZ, tôi thích cách bạn đang suy nghĩ, bạn có thể vui lòng xây dựng thêm một chút không? Cụ thể, đối tượng Biểu mẫu này có được sử dụng giống nhau để hiển thị và xác thực biểu mẫu không? Làm cách nào tôi có thể thực hiện nhiều xác thực thay thế như trường $ _POST ['contact'] ở trên? Cảm ơn. –

+0

Có, một mô-đun hiển thị biểu mẫu và xác thực nó. Đó là lý do tại sao tôi đã đề cập đến thực tế, điều đó phụ thuộc nhiều vào thiết kế của toàn bộ ứng dụng của bạn, cách bạn triển khai mẫu MVC như troelskn đã đề cập ở trên, v.v. Tuy nhiên, bạn có thể tạo một lớp để xác thực dữ liệu chỉ khi đó là tất cả những gì bạn muốn. – zalew

+0

[tiếp tục] Tôi không nghĩ rằng việc tạo một lớp học xác thực sẽ giúp bạn gần gũi hơn với cách django bạn đã đề cập trong câu hỏi của bạn, xác nhận có quá ngọt ngào vì nó là một phần của toàn bộ quá trình xử lý mẫu được thiết kế tốt. – zalew

1

Tôi biết đó là điều bạn đã loại trừ và tôi cũng giống như bạn cho đến một năm trước, khi tôi buộc bản thân mình học cái gì đó mơ hồ như Qcodo (khung php), và tôi không thể làm gì nó bây giờ. Nó chỉ đơn giản là tuyệt vời để cất cánh rất nhiều luôn luôn gánh nặng gánh nặng ra khỏi vai của bạn. Tại sao lại là Qcodo? Vào thời điểm đó, tôi muốn tìm hiểu một trong những tiên tiến nhất kể từ khi tôi đã học tập, vì vậy tôi tìm kiếm các tính năng rộng nhất bộ, mà Qcodo dường như cung cấp. Hôm nay tôi không biết cái nào là nóng nhất, nhưng đối với tôi Qcodo vẫn hoàn thành mọi nhu cầu của tôi.

4

IMHO, nỗ lực xử lý biểu mẫu dưới dạng một khái niệm là thất bại. Nếu bạn có bất kỳ loại kiến ​​trúc phân lớp nào đối với ứng dụng của bạn, các biểu mẫu có khả năng cắt ngang chúng. Các biểu mẫu có logic ứng dụng (lớp điều khiển), chúng có một biểu diễn trực quan (lớp xem), chúng có trạng thái (mô hình lớp ứng dụng) và cuối cùng chúng thường gọi một số kiểu kịch bản giao dịch (lớp mô hình).

Tôi nghĩ bạn nên bỏ ý tưởng về "biểu mẫu" làm thực thể và thay vào đó tập trung vào ba phần (xử lý đầu vào, kết xuất và lớp mô hình) là các vấn đề hoàn toàn riêng biệt, có thể (hoặc có thể không) có liên quan chặt chẽ với nhau. Đây là một số lần được gọi là mẫu MVC, mặc dù thuật ngữ này được tải rất mạnh bởi bây giờ nó có thể có nghĩa là rất nhiều thứ.

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