Neden Zend Framework bu kadar popüler?

13 Cevap php

Ben bir trol değilim ve benim hedefim bir alev savaş başlatmak için değil; Ben Zend Framework yazarları saygısızlık etmek demek ne: o ince bir sürü iş var. Ama ... halletmek için bir iş var ve ben onunla apps bina gerçekliğe karşı ZF popülerlik uzlaştırmak bir sabit zaman yaşıyorum. Gerçekten onlar Zend Framework kullanmak neden diğerlerinden bilmek istiyorum.

Ben PHP dünyasına oldukça yeni ama birçok dilde programlama bir sürü şey yaptım. Birçok dersler, okuma ve ona apps birkaç bina sonra, bazı temel Zend Framework tesisleri bana alfa kodu gibi hissediyorum. Benim için temel zayıflıklar şunlardır, diğerleri arasında, onunla uygulamaları dağıtma düşünmek için çok ezici görünüyor - ama tekrar tekrar ZF, değilse the lider çerçeve biri olarak önerilmektedir.

Öncelikle bana uygulanabilir olması ZF çok bulmak diyelim. Önbellek tesis, vb gibi (örneğin JSP / ASP gibi çiftleşmiş sistemleri çok farklı olsa da), modelleme bir sürü şeyler için toplumda bir eğilim var gibi görünüyor yönlendirme hoş çok, Düzen tesis hizmete olup gerektiği gibi çalışıyor (örneğin doğrulama) ve görünüm mantık - kontrolörleri içine (örneğin $ this-> headScript (?) neden benim denetleyicisi js benim görüşüm gerektiren dosya hangi bakım olmalıdır) ancak kullanım meselesi değil necessarily olabilir çerçevenin hatası.

Şimdi onunla benim kısa sürede yaşadım gerçekten ciddi (IMO) zayıf bir çift için. Ben onunla inşa etmeye devam ederse ben gelecekte keşfedeceksiniz diğer alanlarda hayal ürperti.

1. Form Layout
Many people seem to be unhappy with the lack of control over form layout. How can you have a popular framework where constructing a simple form requires so much discussion? Question 1 and question 2.

2. Authentication/Authorization
No one really seems to understand how to simply perform routine authentication/authorization. People [including yours truly] struggle with implementing simple access control. Further, the approach seems to lean on serialization for persistence, rather than traditional database storage of users and permissions. A confusing example, a proposal to enhance the facility, a tutorial - part I, and part II. This is too much work guys!

Benim algılanan zayıflıkları bir sorun, gerçek ya da bir şekilde değil misin? Neden veya neden değil? Neden Zend Framework (veya değil) tercih ettiniz? Eğer farklı bir yaklaşım için ZF dökümü istiyorum o kadar acı verici buldum başka alanlar var mı? Görüş ve önerileriniz için teşekkür ederiz.

13 Cevap

Because they are good at Marketing


Zend's founders Andi Gutmans and Zeev Suraski are key contributors to PHP

Ve onlar php için en eksiksiz çerçevesinde birine sahip.

When you think about it; it's like saying:

"Bizim dil olması gerektiği gibi ölçülebilir değildir, bu yüzden daha hızlı yapar önbelleğe alma ile bir çerçeve yaptı"

  • Most of what Zend offer, can be done without Zend.
  • But Zend's package is a very good "All in one" distribution.
  • Onlar sertifikalar ve eğitimler sunuyoruz.

ZF ana faydalarından biri bunu bileşenlerinden herhangi birini almak ve kolayca kendi (veya bir üçüncü taraf) minimal değişiklik ile çerçeve ile onları kravat olabilir.

Forms: The decorator approach is complicated, but bulletproof vepriceless for applications with many forms. You don't care if you have 10 or 25 items in your form, the style is always the same. Saves you a great deal of work when you know how to use it. For users with simplier minds vegoals there is always the viewScript decorator ;)

Auth/Acl: bu ile herhangi bir sorun yoktu.

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

ve

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

Acl için:

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

Kolayca MVC maç için modifiye edilebilir:

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

ZF iyi bir başlangıç ​​noktasıdır. Benim orta boy bir uygulama MVC iskeleti oluşturmak için Zend_Tool kullanılan ve birçok diğer bileşenleri (Zend_Cache, e-posta, tercüme, formlar, oturumu) kullanılır.

Dekoratörler ile - ve ben Zend dediği gibi bunu yapmak için çalışıyoruz eğer form düzeni karmaşıktır katılıyorum. Dekoratörler olmadan - doğrulama ve özel düzeni sadece Zend_Form unsurları kullanmak için yolu vardır.

Ben Zend Çerezler ile kötü bir deneyim oldu - Ben sadece benim tüm etki alanı için bir cookie olamazdı. Eski güzel setcookie hüner doğru yaptım.

Acl Hakkında - Yine, Zend dokümantasyon ve Zend_Acl örnekler bazen iyi çalışmaz. Ben Denetleyici eklenti yaklaşım ve kontrol izinleri için kendi "rol tabanlı kaynak yönetimi" kullanılmıştır.

Yerine kullanılır Doktrini (ben :) ben gibi NHibernate çünkü sanırım) Ve Doktrini bağlayan gerçekten kolay oldu - ben bile Zend Veri Geçidini deneyin vermedi.

Ben istediğiniz gibi kullanabilirsiniz, çünkü ZF iyi olduğunu düşünüyorum. Ben zor bazı diğer çerçeveler ile olacağını düşünüyorum.

Simplicity to build medium size applications. Until ZF you had to build your own "framework" to do medium size applications. Now is much more simpler.

Ben ayırımı sanmıyorum ve bağımsız olarak kullanılabilen basit elemanları başarının anahtarıdır. Güzel bir özellik, ama düzenli kullanmak değildir.

Support ve community siz e diğer çerçeveler ile dengede alakalı.

Hız açısından diğer çerçeveler sonra daha iyi DEĞİLDİR.

Biz kendi kod "bazı" yazmak mümkün olması gerekiyordu çünkü Wel, biz geliştiriciler biz arn't vardır? Altyapıları, sadece bir ilave yardım sihirbazları olmaması gerekiyordu.

PHP çerçeveler değerlendirirken zamanda tam değildi ve web uygulamaları oluşturmak için yeterli bir çözüm entegre çünkü Zend Framework seçmedim. Ben seçtim symfony ve o günden beri ben başka bir şey geçmek için bir ihtiyaç yoktu.

Ben günümüzde aynı olup olmadığından emin değilim, ama ben her zaman yerine bir çerçeve daha bileşen kütüphanesi olarak ZF düşündüm. Bir çerçeve şeyler yapmanın biraz daha katı kuralları var ve genellikle insanlar bunları yapmak yardımcı olmak daha iyi entegre destek araçlara sahiptir. Bir bileşen kütüphanesi bu konuda daha gevşek. Çerçeve kurallar çerçevenin etki alanındaki en uygulamaların gereksinimlerine karşılık, kendimi açıkça bu çözümü tercih ederim. Bu benim için symfony ile böyle olmuştur. Ben gerektiği gibi belirli ZF bileşenleri kullanmak, ama ZF kendisi benim projeler tabanı asla.

I use ZF for a few reasons: The host of nifty classes, lazy loading of classes, stand-alone usage of classes, and clean clear source. The first time I used it I needed to build an ACL system - a very big complex one. Zend_Acl helped tremendously.

Ben ZF bu kadar belgeler ve db sınıflar üzerinde çalışmak gerektiğini düşünüyorum. Db sınıflar sorunlar PHP kendisi ile ilgili bir çok şey var. Yani belki de Zend içine bakmak isteyen bazı şey.

OP PHP için yeni. PHP bu tür fonksiyonları keyfi adlandırma gibi kusurları var, ama genellikle HTTP için mantıklı ve sizden gerçeği gizlemek değil mi katılıyorum.

Form layout:

Bu gerçekten çok kolay. Dekoratörler onlarla ilk temas sırasında popo bir ağrı vardır, onlar sadece kara büyü demektir. Sonra onlarla hemen hemen her şeyi yapabilir ne kadar yararlı oldukları ve biliyoruz. Sonunda dekoratörler yeterli değil sadece bir noktaya isabet zaman, sadece görünümünde ayrı bir form öğeleri işlemek hatta kendi form HTML yazabilirsiniz. Bu örneği ele alalım:

form

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

görünüm

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

denetleyicisi:

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

There you go. You have a form, you wrote its HTML manually, but you still benefit from ZF's inbuilt validation. Why? Because you still create the form object in the controller and feed it the data sent via POST. You still get your filters, validators, anything you want. With any HTML you want. And you can also plug an external görünüm to the form if you want to go extreme :).

Ah, bu arada, size formları reuseable olduğunu biliyor muydunuz? Evet, bir form yazmak ve birden fazla yerde kullanabilirsiniz. Hiçbir güçlük. İşte ne ben şahsen ZF formlar hakkında gibi (ve CodeIgniter'daki sevmediğim - arada, çok büyük bir çerçeve olan).

Authentication:

Zend Framework: Login password hash, email validator?

Evet, bu kod sadece küçük bir parçası. Temelde kopyalamak ve projelerde yapıştırın.

ACL gelince, sadece kurallar oluşturmak ve sonra bunları gerektiğinde onları kontrol edin. Bir tek liner. Basit olamaz.

Şahsen, ben sadece para kazandırır çünkü ZF popüler olduğunu düşünüyorum. Eğer bir projenin önünde beni koyarsanız, beni onun yerine ben biliyorum başka bir çerçevenin ZF kullanmama izin verirsen ben iki kere daha hızlı bitirmek olacak size garanti edemez. Ve muhtemelen zamanın bir kısmını ben temel PHP her şeyi yapmak gerekir. Yani bunun hakkında: zaman tasarrufu = para tasarrufu. Ancak iki kurallardan biri, sağ - veya size ekstra para kazanma?

Zend_Form veya dekoratörler kendileri kullanmaya gerek yoktur. Sadece Denetleyicisi içinde daha sonra düz HTML Formları kullanabilirsiniz ve = Eylemler böyle Zend_Filter_Input kullanabilirsiniz. Yani hem âlemlerin iyi var.

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();
        }
    }

ZendFramework ile beni etkilenmemiş renk. Zend Framework kullanarak kodunuzu eğitim tekerlekleri bir dizi kaynak gibidir. Zend Framework yapabileceğim bir şey çiğ PHP yapabileceği bir şeydir. (. ZF kendisi çiğ PHP yazılmış unutmayın) Ve genellikle kod satır aynı sayıda yapabilirsiniz - uygulamanın geri kalanı ile tutarlı bir tarzda yazılmış. Ve, doğal PHP kodu kullanarak, PHP geliştiriciler yalnızca bir azınlık kullanmak bir niş araç kilitli değil. Ve ZF sürümlerinde değişiklikleri ile uyumluluk konusunda endişelenmenize gerek yok.

Benim uygulamalarda, ben ZF araçları çoğunlukla yıllardır civarında olmuştur basit bir PHP fonksiyonları kullanılarak, yapılacak tüm aynı şeyleri yapın:

  • form verilerini doğrulamak
  • form girişi temizlemek
  • formlar üzerinden yüklenen dosyaları ele
  • işlemek ve tarihlerini karşılaştırmak
  • kimlik doğrulama işlemek
  • e-posta göndermek
  • log dosyaları yazmak
  • yapılandırma dosyaları okuma
  • dış HTTP sayfalarını okuyun
  • JSON ve SOAP biçimlerde değişimi
  • üçüncü parti API'leri ile çalışmak

Ben zaman zaman değer Zend Framework çok şey bulamıyorum. Ve bana Chains CodeCoffin, AppShackler veya Ruby gibi zorba "iskele" çerçeveler başladı alamadım.

ZF gerçekten en popüler PHP çerçeve olup olmadığından emin değilim. Ben hepsi özelleştirmek için zor görünüyordu, çünkü "sihirli" daha fazla şeyler yapmak diğer çerçeveler ile karşılaştırarak sonra seçti.

Ben ZF PHP MVC framework odaklı iyi bir nesne olduğunu düşünüyorum, ama bazı ZF yaklaşımları ile aynı fikirde değilim. Örneğin, ben sadece filtreleme için Zend_Form kullanmak ve verileri doğrulamak. Tüm HTML ve sunum şeyler görünümü yazılara yapılır. CSS düzeni için sorumludur. Biz değişen bazı değişiklikler çoğu zaman gerekiyorsa, sadece CSS yeterlidir. Ben aynı form birçok sayfalarında görünmesi gerekiyorsa, ben bir kısmi görünümü komut dosyası olarak kullanabilirsiniz.

Ben her modeli için bir Eşleyicisi'ne yazmak ve her veritabanı tablo için bir Zend_Db_Table alt sınıfı oluşturmak zorunda sevmiyorum. Bunun yerine veri erişimi, ya da belki Doktrini için diğer desenleri kullanmak için nasıl araştırma yapıyorum.

Ne Zend_Acl hakkında sevmiyorum olduğunu ACL dosyada saklar ACL bilgi. Ben veritabanında bu bilgileri saklamak istiyorum.

Bu çerçevede ilgili iyi bir şey bu şeyleri senin yol yapmak kolaydır.

Önceki cevaplara ek olarak, başlıklı DZone bir son havuzda Which PHP framework would you use today for a brand new application?, Zend Framework yeni projeler için en çok tercih edilen olmak üzere seçildi olduğunu belirtmekte yarar var.