Ne kavramsal Symfony ve CakePHP'de arasındaki fark nedir?
Ben Symfony gibi neden sadece bu konu dengelemek için, şudur:
Kavramsal olarak, ben fark bu olduğunu söyleyebilirim:
Ben verebilirim iyi tavsiye hızla hem de kendi basit bir veri modeli kurmak için çalışın, ve bazı temel arayüzleri ile deneme ve sadece en iyi kendi kodlama stilini uygun olduğunu görmek için. Ben her iki çerçeveler çok aktif ve tutkulu kullanıcı toplulukları var ve siz karar iki şekilde pişman olmayacağını düşünüyorum.
Bir büyük fark modeller oluşturulur nasıl olduğunu: CakePHP modelleri PHP ile yazılmış olan, ve Senfoni modelleri YAML yazılı ve uskur tarafından desteklenmektedir. (Tam bir AR uygulaması olmamasına rağmen) CakePHP'nin yaklaşımı RØR en ActiveRecord daha benzer. CakePHP, genel olarak, daha raylar-esque.
CakePHP'nin belgeler ve araçlar, benim görüşüme göre, daha geniş bir hedef kitleye ve sözdizimi ve yardımcıları daha kolay, ama senin (autoloading gerçekten yoktur) kendi özel hedef olarak PHP5 kucaklamak henüz. Genel olarak, bu tür bir tesis standardını izler çünkü CakePHP'nin yaklaşımı tercih ve ben organizasyonuna applaude. Ben de PHP5 iyilik var Kohana için tavsiye ederim.
Odak onun biraz farklı olsa da, another post bu soru hakkında yığın taşması var.
Edit: I revisted Symfony to find the reasons I said 'no' and came up with these — your opinions and mileage may vary:
CakePHP da ölü basit iskele ve CLI araçları anlamak kolay sunar. Senfoni CLI sözdizimi bana biraz sakat ve Symfony'de 'REZİL' sadece aynı değildir. Symfony'nin (awkard) eylem sözdizimi ile bu birleştirin ve Symfony'nin kötü tasarlanmış (ve anlamak için zorlu) web sitesi atmak, ve 3. parti için tercihi belgelerine (Amazon kitap) ödenen ve eksilerini sütununda daha fazla kene var.
Yukarıda CakePHP ve sınırlamaları hakkında bazı iddialar basitçe doğru değildir. Sorgu mümkündür. Sadece bunu yapmak için nasıl bilmeniz gerekir. FAST çalışan yere vurmak böylece CakePHP "automagic" SUPER güzel. Bu BY FAR gelişimine HIZLI çerçeve (dolayısıyla neden bu kadar yakından tabii ki büyük bir başarı ve vızıltı oldu RoR sonra modellendi) 'dir. Verileri farklı döndü ve belirtilen birkaç kısa yöntem çağrıları ve dizi parametreleri olan daha karmaşık sorguları bazı yapmak almak için daha gelişmiş davranışlar vardır.
Ancak. Bildiğim kadarıyla söyleyebilirim, başka bir çerçeve gibi birçok "automagic" sınıfları ve yöntemleri vardır. Kek görevlerin en yaygın alır ve onu halletmek için kolay bir yol sağlar. Eğer gerçekten akıllı iseniz, modeli düzeyde kodlama çoğunu yapmak ve app_model ve app_controller dosyanın faydalanmak ve son derece verimli bir uygulama olacak.
Konsol büyük ve her zaman genişleyen. Topluluk gerçekten şaşırtıcı ve bir şeyler daha hızlı haddeleme almak için birçok birçok katkıları var. Kelimenin tam anlamıyla mimar ve sonra ne gerekir çoğu kullanılabilir çünkü çok hızlı bir uygulama oluşturmak yerine "adet" taşıyabilirsiniz. Siz başka bir çerçeve ile bu alamadım. Genellikle kodlama bir LOT daha fazla zaman harcamak zorunda.
Son olarak. Dokümantasyon kalmış iken, şimdi çok daha iyi olduğunu ve Kek de dokümantasyon ve sürüm 1.1 dönemi bu eksikliği sırasında bazı sert eleştiriler aldı ederken ... O HALA iyiydi sadece ciddi gözardı. Ufukta 1.2 ve şimdi Cake2 ve Cake3 ile ... Sen görüş değiştirerek bir sürü görmek için gidiyoruz.
Ben 1.1 beri CakePHP'ye kullandık. Ben bunu bir mümin değilim. Ben büyük kurumsal siteler için kullanmıştır. O gün başına isabet milyonlarca ve milyonlarca almak ... Biz çözümler için WordPress ve Drupal gibi şeyler alemin bitti. Eğer bir CMS tipi site için o düzeyde olsun, ben onu CakePHP var süper memnunum. Aynı şekilde, Symfony ve CodeIgniter ölçekleme ile size yardımcı olacaktır. Ben de o çerçeveler ya da hakkında kötü bir şey diyemeyiz. Ben sadece daha az zaman harcamak kodlama ve CakePHP ile daha büyük bir topluluk (ve bir süper samimi IRC kanalı) bulabilirsiniz söyleyebiliriz.
Ben geçiyor ve CakePHP hakkında yukarıdaki yorum benim tepkilerin bazı belgeleyen ve bazıları (haklı olarak bazı durumlarda) algılanan hatalar bulunuyor ediyorum.
Büyük web siteleri CakePHP'ye, bazı varlık Mozilla Eklentileri, MİT tarafından Çizilmeye ve Hot Scripts kullanılarak çalıştırılır. Orada sağ CakePHP web sitesinin alt kısmında büyük bir listesi (http://cakephp.org). Ne olursa olsun, herhangi bir iyi bir geliştirici olarak uzun çerçeve (: D CakePHP çok saçma değil) tamamen saçma değil gibi bir çerçeve kullanarak ölçeklenebilir bir web sitesi kurmak gerekir.
Bu çerçevede her özelliği geçer bir çok iyi (ücretsiz) CakePHP öğretici olmadığı doğrudur, ancak dokümantasyon son derece iyi ortaya koydu ve ayrıntılı olmalıdır. Net değil her şey Google Grubu aracılığıyla ve IRC giderilebilir, ve biz belgelere herhangi bir ve tüm değişiklikler / düzeltmeler bekliyoruz. Birçok şey uygulamaya özgüdür ve insanlar ilginç ipuçları ve hileler ile gelip, ve bu yüzden thusly herkes (sadece yorum değil!) Katkıda bulunmaya davet edilir gibi dokümantasyon, sadece bir çekirdek geliştirici sorun değildir. Tabii ki hepsi moderator, yani cruft / spam çoğu eklenmez.
Kod çekirdek işlevsellik supercedes yeni kod ekleyebilirsiniz modüler olduğunu. Fazla kod sadece PHP sınıfları. Böyle işlevsellik yazılı bir yük olabilir, ve ben FillIns gibi alternatif sınıflarını kullanarak denemedim doğrudur. Evet, diğer Orms işlemek değil, bu yüzden (o itmek ve Doktrin destek içerir) irade başka bir PHP sınıfları karıştırmak ve maç mümkün olacak, varsayılan ile sıkışmış, ancak bu Cake3 sabit olmalıdır.
CLI çok iyi olduğunu ve App özgü destek için uzatmak kolaydır. Bir örnek Geçenlerde otomatik github endeksli tüm diğer CakePHP eklenti yüklemek istiyorum, bir kabuk eklenti gelişmiş olmasıdır. Son derece kullanışlı ve esnek bir şeyler inşa etmek için yaklaşık 5 saat sürdü. Böyle işlevsellik Symfony'de için var eminim ve RoR için var YAPAR :)
Raylar gibi olmaktan gelince, ve o değildir. Birçok şey hepsi sonra MVC çerçeveler vardır, benzer ve CakePHP yaklaşım "Yapılandırma vs Sözleşmeleri" için de geçerli. Symfony kuşkusuz çünkü PHP5-sadece destek var, ama yine de son derece kullanışlı ve sezgisel bir güzel sözdizimi ile PHP4 desteği Mucks. Düz bir klon değil gibi çerçeve kutudan Raylar HER özelliği sağlamaz. CakePHP bir çerçeve değil, bir kütüphane (Zend hi), bu yüzden kutunun dışında her şeyi vermeyecektir.
Görüşlerin nesil I, CakePHP biraz sakat kabul vardır. Bu büyük ölçüde CakePHP 1.3 ve 2.0 geliştirilmiş ediliyor. (Sadece şimdi olduğu gibi görünüm türü aksine) Bu her Model, View ve Controller için özel şablonlar destekleyecektir. Ayrıca, tam olarak ne istediğinizi üretmek için özel şablonlar ile birlikte kullanılabilir (sadece yönetici görünümleri dahil) görünümleri sadece belirli türleri otomatik pişiriyor neilcrookes giderek bir kullanıcı tarafından github kabuk görevleri bir dizi mevcuttur. CSS stil de yardımcı olur :) ama bu kesinlikle geliştirilebilir bir şeydir.
CakePHP bu kadar Modeli çok çeşitli parametreleri alır :: yöntemleri bulmak, bazı durumlarda ham SQL sorguları kullanmak yararlı olabilir ancak. Model :: find () yöntemi, çok esnek ve karmaşık bulur oluşturma gibi sürece beni başarısız değil. Ben bu kaçınılmaz her zaman alır ORM, rahat olmak ile ilgili olduğunu varsayalım.
Veritabanına ilgili herhangi bir işlem yapılıyorsa nerede olduğunu gibi form doğrulama mantıksal, model katman olmalıdır. Ben inanıyorum, belirli bir görünümde alternatif doğrulama belirtmek, ya da takas doğrulamaları (bu bir davranış yoktur ama o olmadan bunu yapmak zor olmaz) olabilir.
Çok boyutlu diziler biraz saçma, ama yine de büyük olasılıkla çok boyutlu nesneleri olurdu. PHP4 kırık bir nesne modeli vardı ve CakePHP nesneleri kullanmaz neden bu kadar olmasıdır. (Bir önceki açıklamada, yukarıda belirttiğimiz gibi) bu CakePHP gelecek sürümünde giderilmiştir ediliyor, ancak bazı durumlarda PHP4 destekleyen bir çerçeve olması yararlıdır. Yine, YMMV ve ben tam PHP5 uygulama hızı ve gelişme, hem büyük bir nimet olacağını kabul.
Veritabanları will takas edilebilir. CakePHP ORM her zaman desteklenir ve her zaman geçerli sorguları oluşturmak, böylece, DB, tek tip (MySQL sadece enums dolayısıyla düştü destek) doğasında olan işlevsellik izin vermez. Sen, bir uygulama isterseniz her Modelin başına bir çoklu veritabanları olabilir, ve irade onları takas hatta belirli bir model için hiç bir veritabanı kullanamazsınız. Yani hayır, belirli bir veritabanına bağlı değildir.
Sonunda, seçim sizindir, ve ben bütün kalbiyle hem de içine bakarak ve belgeler aracılığıyla okuma, Gruplar göz atmanızı öneririm, çerçeve en iyi kalkınma tarzı uygun hangi hem görme IRC kanalları, bloglar ve herhangi bir forum. Okuyucu bu yüzden benim sonrası bazı önyargı var ben bir CakePHP geliştirici değilim, sakının.
Dahası, mevcut cevaplar, hem mümkünse denemelisiniz. Ben de biraz kullanmak ve bazı zamanla Symfony tercih gelmiş.
ama ben oldukça eminim ki onun değil, çünkü bir ya da diğer daha iyi, ama symfony benim zihin daha iyi çalışır şekilde uygun olur çünkü, ben bir çerçevesi dışında yazılım yazmak ne yaparım onun yakın, bu yüzden daha sezgisel hissediyor. Ben diğerleri aklın başka çerçevenin paradigmaya uyar bulabilirsiniz bekliyoruz.
Ben oldukça nesnelerden daha dizilerin kullanımı yoluyla, CakePHP'nin nesneler bir zayıflık olduğunu düşünüyorsunuz, o söyledikten sonra. Onlar tam aynı şeyi, ama nesneleri yerine verileri temsil diziler dönmek olabilir (Bu ...! Ben zor kılan bir şey yapmak gerektiğinde periyodik içimde yoğun bir nefrete dönüşür şey), ve ben en çok düşünüyorum Ben sorunları gitmek istiyorum - yerine varolan modeli sınıfında işlevleri yazma ve onlara bir dizi geçen daha yapmak istediğiniz şeyleri elde etmek için veri nesneleri içine ekstra işlevsellik eklemek mümkün olurdu.
CakePHP model katman bir karmaşa. Bir Kategori ve Öğe nesne arasında bir çok-çok ilişkisi gibi basit şeyler yapmaya çalışın ve daha sonra belirli bir özellik kümesine sahip Kategorideki Tüm Öğeleri almak.
Gibi:
SELECT items.* FROM items, categories, item_categories WHERE item.available=1 AND category.id=1 AND item_categories.category_id = category.id
Bu kadar önemsiz bir şey bulmak (bir model) yöntemi ile çocuk bir açıklamada mümkün değildir.
Yukarıdaki item_category tabloya bir öğe olarak bir tek çok-çok ilişki eklemek için çekirdek API hiçbir yolu da yoktur. Orada online o ekmek yayınlanmıştır birisi (http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior), bir davranış da dahil olmak üzere bir çift çözümleri vardır, ama bu sadece şeyler olduğunu uskur, Tork (Java), Hazırda (Java) gibi herhangi bir iyi ORM framework, SQLObject (Python ), sağ kutunun SQLAlchemy (Python) desteği. Temelde ya bu eksik özellikler eklemek veya size konum uygulama odaklanmak böylece ham SQL sorguları ama bir çerçevenin temel amacı şeyleri yapmaktan kaçınmak için kullanmak için PHP kodu bir çok yazmak zorunda gidiyoruz böylece yazarken gerçekten CakePHP ile çok kazanıyor değil.
Orada başka sorunlar bir demet ve hepsi gerçekten, model katman içine bağlı olan form doğrulama dahil dağınık boyutlu diziler ile uğraşmak zorunda, ham sql kullanmak zorunda ve belirli bir veritabanı için app bağlama modeli katmanı ile yapmak zorunda .
Ben kullanımı Symfony söyleyebilirim. Bu daha büyük bir çerçeve öğrenmek için birkaç gün daha uzun sürebilir ama buna değer olacaktır. Ben Symfony için açık ve pürüzsüz yelken oldu sorunların bu tür çok fazla çalışan sonra, ben üzerinde çalışıyorum bir proje için CakePHP kullanmak için gidiyordu.
Ben her sınıf yazısının üstündeki sayıda ithalatı var olduğunu Symfony 2 bulundu ise Cake 2.0 güzel, ihtiyacınız sınıfların çoğu autoloads. Tüm bu ithalat ezberlemek için çalışılıyor near-impossible, bu nedenle her zaman kullanışlı bir başvuru gerekir.
eg. Symfony 2 kontrolör kodu ...
namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
// bunch of other imports accumulate here...
class HelloController {
...
Iğrenç, Ahh. Bu titiz için iyi OO teknik olsa da, bu geliştirme zamanı (RAD bye bye) uzatır. En azından Kek şimdi bellekten hızlı basit şeyler çoğu kod olabilir.