2009-12-02 43 views
27

Tôi không phải là một troll và mục tiêu của tôi không phải là để bắt đầu một cuộc chiến tranh lửa; tôi không có nghĩa là không tôn trọng các tác giả của khung công tác Zend: có rất nhiều công việc tốt trong đó. Nhưng ... Tôi có một công việc để hoàn thành và tôi đang gặp khó khăn trong việc hòa giải sự phổ biến của ZF với thực tế của việc xây dựng ứng dụng với nó. Tôi thực sự muốn biết từ những người khác tại sao họ sử dụng Zend Framework.Tại sao Zend Framework lại phổ biến đến thế?

Tôi khá mới mẻ với thế giới PHP nhưng tôi đã thực hiện rất nhiều chương trình bằng nhiều ngôn ngữ. Sau khi đọc nhiều hướng dẫn và xây dựng một vài ứng dụng trong đó, một số tiện ích Zend Framework cốt lõi cảm thấy giống như mã alpha cho tôi. Đối với tôi những điểm yếu cơ bản sau, trong số những người khác, có vẻ quá áp đảo để xem xét việc triển khai các ứng dụng với nó - nhưng hơn và hơn nữa ZF được đề xuất là một trong những, nếu không phải là khuôn khổ hàng đầu.

Trước tiên hãy để tôi nói rằng tôi thấy phần lớn ZF khả thi. Định tuyến hoạt động khá nhiều như nó cần, cơ sở Layout có ích (mặc dù rất khác với các hệ thống templating như JSP/ASP), cũng như cơ sở cache, vv Có vẻ là một xu hướng trong cộng đồng với nhiều thứ (ví dụ: xác nhận hợp lệ) và xem logic (ví dụ $ this-> headScript() - tại sao bộ điều khiển của tôi phải quan tâm đến tập tin js nào cần xem?) vào bộ điều khiển nhưng có thể là vấn đề sử dụng chứ không phải nhất thiết phải là lỗi của khung công tác.

Hiện tại với một số điểm yếu nghiêm trọng (IMO) mà tôi đã gặp phải trong thời gian ngắn với nó. Tôi rùng mình tưởng tượng ra những khu vực khác mà tôi sẽ khám phá trong tương lai nếu tôi tiếp tục xây dựng nó.

1. Bố cục biểu mẫu
Nhiều người dường như không hài lòng với việc thiếu kiểm soát bố cục biểu mẫu. Làm thế nào bạn có thể có một khuôn khổ phổ biến trong đó xây dựng một hình thức đơn giản đòi hỏi rất nhiều cuộc thảo luận? Question 1question 2.

2. Xác thực/ủy quyền
Không ai thực sự hiểu cách thực hiện xác thực/ủy quyền thông thường. Mọi người [bao gồm cả bạn thực sự] đấu tranh với việc thực hiện kiểm soát truy cập đơn giản. Hơn nữa, cách tiếp cận này dường như dựa vào việc tuần tự hóa cho sự kiên trì, thay vì lưu trữ cơ sở dữ liệu truyền thống của người dùng và quyền. A confusing example, a proposal to enhance the facility, a tutorial - part I, and part II. Đây là quá nhiều người làm việc!

Điểm yếu của tôi có thực sự không thực sự hoặc bằng cách nào đó không phải là vấn đề? Tại sao hay tại sao không? Tại sao bạn chọn Zend Framework (hay không)? Có những khu vực nào khác mà bạn thấy đau đớn đến mức bạn muốn đổ ZF cho một cách tiếp cận khác không? Cảm ơn ý kiến ​​của bạn.

Trả lời

15

Một trong những lợi ích chính của ZF là bạn có thể lấy bất kỳ thành phần nào trong số đó và dễ dàng kết hợp chúng với khuôn khổ của riêng bạn (hoặc bên thứ ba) với sửa đổi tối thiểu.

+1

+1. Lần đầu tiên tôi sử dụng Zend Framework, nó chỉ là Zend Lucene mà tôi đã theo đuổi, vì vậy tôi chỉ sử dụng nó. Điều đó đã cho tôi sự tự tin rằng Zend là hoàn toàn khả thi. Tuy nhiên, tôi phải thừa nhận rằng tôi cảm thấy nó là ** quái dị ** nếu được sử dụng cho mọi khía cạnh của ứng dụng của một người. – namespaceform

+1

+1. Đó là một lý do lớn để tôi tìm hiểu về nó. –

18

Bởi vì họ là tốt tại thị


sáng lập Zend của Andi Gutmans và Zeev Suraski là đóng góp quan trọng để PHP

Và họ có một trong những khuôn khổ hoàn hảo nhất cho php.

Khi bạn nghĩ về điều đó; nó giống như nói:

"ngôn ngữ của chúng tôi không phải là performant vì nó có thể được, vì vậy chúng tôi tạo ra một khuôn khổ với bộ nhớ đệm mà làm cho nó nhanh hơn"

  • Hầu hết những gì Zend lời đề nghị, có thể được thực hiện không có Zend.
  • Nhưng gói của Zend rất tốt Phân phối "Tất cả trong một".
  • Họ cung cấp giấy chứng nhận và đào tạo.
+1

-1 Không phải là rất xây dựng! – Lizard

+2

cũng là một lời giải thích ngắn gọn cho "Tại sao khung công tác Zend lại phổ biến như vậy?" – Roch

+2

+1 Tôi đồng ý. Đó là một yếu tố tiếp thị liên quan, đó là chắc chắn –

2

Đơn giản để xây dựng các ứng dụng có kích thước trung bình. Cho đến khi ZF bạn phải xây dựng "khuôn khổ" của riêng mình để làm các ứng dụng có kích thước trung bình. Bây giờ đơn giản hơn nhiều.

Tôi không nghĩ rằng các yếu tố tách rời và đơn giản có thể được sử dụng độc lập là chìa khóa để thành công. Là một tính năng tốt đẹp, nhưng không phải là việc sử dụng thường xuyên.

Hỗ trợcộng đồng siz e có liên quan trong số dư với các khung công tác khác.

Về tốc độ, chúng KHÔNG tốt hơn các khung công tác khác.

+0

Theo như tốc độ, bạn đang đề cập đến khung PHP, đúng không? –

1

Tôi không chọn Zend Framework vì tại thời điểm tôi đánh giá khung công tác PHP, nó không phải là giải pháp hoàn chỉnh và tích hợp đủ để xây dựng các ứng dụng web. Tôi đã chọn symfony và kể từ đó tôi chưa bao giờ có nhu cầu chuyển sang bất kỳ thứ gì khác.

Tôi không chắc chắn nếu nó giống nhau ngày nay, nhưng tôi luôn nghĩ ZF là một thư viện thành phần chứ không phải là một khuôn khổ. Một khuôn khổ có một quy tắc nghiêm ngặt hơn một chút về làm việc và thường có các công cụ hỗ trợ tích hợp tốt hơn để giúp mọi người thực hiện chúng. Một thư viện thành phần là lỏng lẻo hơn trong vấn đề này. Khi các quy tắc khung tương ứng với các yêu cầu của hầu hết các ứng dụng trong miền của khung công tác, bản thân tôi rõ ràng thích giải pháp này. Đây là trường hợp với symfony cho tôi. Tôi sử dụng một số thành phần ZF nhất định khi cần thiết, nhưng không bao giờ căn cứ vào các dự án của tôi trên ZF.

+0

Tôi mạnh mẽ đồng ý với điều này, tôi đến từ một nền CakePHP/Rails, và bạn chỉ cần làm một số lượng lớn công việc để có được một hình thức ra khỏi đó, đó không phải là cách nhanh nhất để có được một webapp chạy. – Shiv

3

ZF là điểm khởi đầu tốt. Tôi đã sử dụng zend_tool để tạo một bộ khung MVC của ứng dụng cỡ trung và sử dụng nhiều thành phần khác (Zend_Cache, e-mail, dịch, biểu mẫu, phiên).

Và tôi đồng ý rằng bố cục biểu mẫu phức tạp nếu bạn đang cố gắng làm điều đó như Zend nói - với trang trí. Có nhiều cách để chỉ sử dụng các phần tử Zend_Form có xác thực và trong bố cục tùy chỉnh của bạn - mà không cần trang trí.

Tôi đã có trải nghiệm không tốt với Zend Cookies - Tôi không thể đặt cookie cho toàn bộ miền của mình. Old tốt setcookie đã làm các trick đúng.

Về Acl - một lần nữa, ví dụ trong tài liệu Zend và Zend_Acl đôi khi không hoạt động tốt. Tôi đã sử dụng phương pháp tiếp cận Plugin điều khiển và "quản lý tài nguyên dựa trên vai trò" của riêng mình để kiểm soát quyền.

Tôi thậm chí không thử dùng Zend Data Gateway - sử dụng Doctrine thay vào đó (tôi đoán đó là vì tôi thích nHibernate :)) Và việc kết nối Doctrine thật dễ dàng.

Tôi nghĩ ZF là tốt vì bạn có thể sử dụng nó như bạn muốn. Tôi nghĩ nó sẽ khó hơn với một số khung công tác khác.

6

Hình thức: Cách tiếp cận trang trí phức tạp, nhưng chống đạn và vô giá đối với các ứng dụng có nhiều hình thức. Bạn không quan tâm nếu bạn có 10 hoặc 25 mục trong biểu mẫu của bạn, phong cách luôn giống nhau. Tiết kiệm cho bạn rất nhiều công việc khi bạn biết cách sử dụng nó. Đối với người dùng với tâm trí và mục tiêu luôn luôn có những trang trí viewScript đơn giản hơn;)

Auth/Acl: Không bao giờ có vấn đề gì với những.

Zend_Auth::getInstance()->hasIdentity() //logged in 

Zend_Auth::getInstance()->getIdentity()->role; //returns admin 

Đối Acl:

$acl->isAllowed($who, $where, $what); 
$acl->isAllowed('roleAdmin', 'resourcePosts', 'create'); //returns true 

có thể dễ dàng sửa đổi để phù hợp với MVC:

$acl->isAllowed('roleAdmin', $module.ucfirst($controller), $action); //returns true 
$acl->isAllowed('roleAdmin', 'adminPosts', 'create'); //returns true 
+0

Có lẽ tâm trí của tôi quá đơn giản đối với ZF ... Về Auth/Acl: Bạn có thể trỏ đến một ví dụ hoặc hướng dẫn công khai hoàn toàn chi tiết [như mã có thể tải xuống và chạy được] cách sử dụng bản phát hành Zend Framework hiện tại (1.9, không " đề xuất "hoặc" phòng thí nghiệm "để quản lý xác thực/ủy quyền của ba người dùng/mật khẩu trong ba vai trò khác nhau (ví dụ: khách, thành viên, quản trị viên) để bảo vệ ba bộ điều khiển khác nhau trong mô-đun mặc định? Điều này sẽ hữu ích cho những người mới đến; nếu nó tồn tại ở đâu đó tôi đã không tìm thấy nó. – keithm

+0

Không nhận thức được. Nhưng tôi đã làm việc tốt với các trang hướng dẫn sử dụng cho Zend_Acl và Zend_Auth. Chỉ là câu hỏi duy nhất - nơi để xử lý ACL - sử dụng plugin điều khiển phía trước và phương thức preDispatch của nó. –

2

Wel, chúng tôi đang phát triển bởi vì chúng ta có nghĩa vụ phải có thể viết "một số" đồng của chúng ta de, phải không? Khung không phải là trình thuật sĩ, chỉ là một sự hỗ trợ bổ sung.

1

Tôi sử dụng ZF vì một vài lý do: Máy chủ lưu trữ các lớp tiện lợi, tải lớp chậm, sử dụng độc lập các lớp và xóa nguồn rõ ràng. Lần đầu tiên tôi sử dụng nó tôi cần thiết để xây dựng một hệ thống ACL - một hệ thống rất phức tạp. Zend_Acl đã giúp rất nhiều.

Tôi nghĩ rằng ZF cần phải làm việc trên các tài liệu và các lớp học db của nó. Các vấn đề về các lớp db có rất nhiều việc phải làm với chính PHP. Có lẽ đó là điều mà Zend muốn xem xét.

OP mới đối với PHP. Tôi đồng ý PHP có những sai sót như việc đặt tên tùy ý các chức năng, nhưng nói chung nó có ý nghĩa đối với HTTP và không che giấu thực tế với bạn.

0

Tôi không chắc liệu ZF có thực sự là khung công tác PHP phổ biến nhất hay không. Tôi đã chọn nó sau khi so sánh nó với các khuôn khổ khác làm nhiều thứ hơn "kỳ diệu" bởi vì tất cả chúng dường như khó tùy chỉnh.

Tôi nghĩ ZF là một khuôn khổ hướng đối tượng MVC PHP tốt, nhưng tôi không đồng ý với một số phương pháp tiếp cận ZF. Ví dụ, tôi chỉ sử dụng Zend_Form để lọc và xác thực dữ liệu. Tất cả nội dung HTML và bản trình bày được thực hiện tại các tập lệnh xem. CSS chịu trách nhiệm bố cục. Nếu chúng ta cần một số thay đổi thì phần lớn thời gian chỉ thay đổi CSS là đủ. Nếu tôi cần phải làm cho cùng một hình thức xuất hiện trong nhiều trang, tôi sử dụng nó như là một kịch bản xem một phần.

Tôi không muốn viết Mapper cho từng Mô hình và tạo một lớp con Zend_Db_Table cho mỗi bảng cơ sở dữ liệu. Thay vào đó, tôi nghiên cứu cách sử dụng các mẫu khác để truy cập dữ liệu, hoặc có thể là Doctrine.

Điều tôi không thích về Zend_Acl là lưu trữ thông tin ACL trong tệp ACL. Tôi muốn lưu trữ thông tin đó trong cơ sở dữ liệu.

Điều tốt về khuôn khổ này là dễ dàng thực hiện mọi thứ theo cách của bạn.

1

bố cục biểu mẫu:

Nó thực sự dễ dàng. Trang trí là một nỗi đau trong mông trong lần tiếp xúc đầu tiên của bạn với họ, họ chỉ là ma thuật đen. Sau đó, bạn nhận ra chúng hữu ích như thế nào và bạn có thể làm hầu hết mọi thứ với chúng. Khi bạn cuối cùng đạt đến một điểm mà trang trí chỉ là không đủ, bạn chỉ có thể hiển thị các phần tử biểu mẫu riêng biệt trong chế độ xem của bạn hoặc thậm chí viết HTML biểu mẫu của riêng bạn. Hãy xem xét ví dụ sau:

dạng

$text = new Zend_Form_Element_Text('text'); 
$text->addValidator('NotEmpty')->setRequired(); 
$submit = new Zend_Form_Element_Submit('submit'); 

xem

<form> 
<input type="text" id="text" name="text" /> 
<input type="submit" id="submit" name="submit" value="Send" /> 
</form> 

điều khiển:

$form = new Form_Whatever(); 
if ($this->_request->isPost()) { 
    if ($form->isValid($this->_request->getPost()) { 
     // code 
    } 
} 

Có bạn đi. Bạn có một biểu mẫu, bạn đã viết mã HTML theo cách thủ công, nhưng bạn vẫn được hưởng lợi từ việc xác thực sẵn có của ZF. Tại sao? Bởi vì bạn vẫn tạo đối tượng biểu mẫu trong bộ điều khiển và cho nó dữ liệu được gửi qua POST. Bạn vẫn nhận được bộ lọc, trình duyệt tính hợp lệ, bất kỳ thứ gì bạn muốn. Với bất kỳ HTML nào bạn muốn. Và bạn cũng có thể cắm một cái nhìn bên ngoài vào biểu mẫu nếu bạn muốn đi cùng cực :).

Ồ, nhân tiện, bạn có biết rằng biểu mẫu của bạn có thể sử dụng lại được không? Vâng, bạn có thể viết một biểu mẫu và sử dụng nó ở nhiều nơi. Không có rắc rối. Đó là những gì cá nhân tôi thích về các hình thức trong ZF (và không thích trong CodeIgniter - đó là một khuôn khổ tuyệt vời quá, bằng cách này).

Xác thực:

Zend Framework: Login password hash, email validator?

Vâng, nó chỉ là một mảnh nhỏ của mã. Bạn về cơ bản sao chép và dán nó vào các dự án của bạn.

Đối với ACL, bạn chỉ cần tạo quy tắc của mình và sau đó kiểm tra chúng bất cứ khi nào bạn cần. Một lớp lót. Không thể đơn giản hơn.

Cá nhân, tôi nghĩ ZF phổ biến vì nó chỉ đơn giản là tiết kiệm tiền của bạn. Nếu bạn đặt tôi trước một dự án, tôi có thể đảm bảo với bạn rằng tôi sẽ hoàn thành nó hai lần nhanh hơn nếu bạn cho phép tôi sử dụng ZF thay vì một khuôn khổ khác mà tôi biết. Và có lẽ một phần nhỏ thời gian tôi cần làm mọi thứ trong PHP cơ bản. Vì vậy, đó là về nó: tiết kiệm thời gian = tiết kiệm tiền. Hoặc kiếm thêm tiền cho bạn - nhưng một trong hai quy tắc, phải không?

1

Không cần sử dụng Zend_Form hoặc Trang trí cho mình. Bạn chỉ có thể sử dụng các biểu mẫu HTML thuần túy và sau đó bên trong Controller = Actions sử dụng Zend_Filter_Input như thế này. Vì vậy, bạn có tốt nhất của cả hai thế giới.

public function indexAction() 
    { 
     $this->view->title = 'Search Results'; 

     $filters = array('q' => array('StringTrim' , 'StripTags')); 
     $validators = array('q' => array('presence' => 'required')); 

     $input = new Zend_Filter_Input($filters, $validators, $_GET); 

     if ($input->isValid()) { 
      $this->view->messages = ''; 
      $q = $input->getEscaped('q'); 
      $this->view->q = $q; 

      // do search 
      try { 
       $index = News_Search_Lucene::open(
        SearchIndexer::getIndexDirectory()); 

       $results = $index->find($q); 
      } catch (Exception $e) { 
       $results = array(); 
      } 

      $this->view->results = $results; 

     } else { 
      $this->view->messages = $input->getMessages(); 
     } 
    } 
5

Color me UNIMPRESSED with ZendFramework. Sử dụng khung công tác Zend giống như hàn một bộ bánh xe đào tạo cho mã của bạn. Bất cứ điều gì bạn có thể làm trong Zend Framework là một cái gì đó bạn có thể làm trong PHP thô. (Hãy nhớ rằng chính ZF đã được viết bằng PHP thô.) Và bạn thường có thể làm điều đó với cùng một số dòng mã - được viết theo một kiểu nhất quán với phần còn lại của ứng dụng của bạn. Và, bằng cách sử dụng mã PHP gốc, bạn không bị khóa vào một công cụ thích hợp mà chỉ một số ít các nhà phát triển PHP sử dụng. Và bạn không phải lo lắng về khả năng tương thích với những thay đổi trong phiên bản ZF.

Trong các ứng dụng của tôi, tôi làm tất cả những điều tương tự mà các công cụ ZF làm, chủ yếu là bằng cách sử dụng chức năng PHP đơn giản mà đã được khoảng năm: dữ liệu mẫu

  • Validate
  • làm sạch dạng đầu vào
  • xử lý tải lên thông qua hình thức file
  • thao tác và so sánh số ngày
  • xử lý xác thực
  • gửi emai ls
  • ghi vào file log
  • đọc từ file cấu hình
  • đọc các trang HTTP bên ngoài
  • trao đổi trong JSON và SOAP định dạng
  • làm việc với các API của bên thứ ba

tôi không thể tìm thấy nhiều thứ trong Zend Framework xứng đáng với thời gian của tôi. Và đừng bắt tôi phải bắt đầu những khuôn khổ "giàn giáo" như CodeCoffin, AppShackler hay Ruby in Chains.

+0

Haha, +1 cho khung giàn giáo độc đoán :) –