56

symfony と cakephp の概念的な違いは何ですか?

4

9 に答える 9

69

このスレッドのバランスをとるために、これが私が symfony を好む理由です:

  • PHP5を使用
  • Yahoo!のような非常に大きなサイトを運営しています。答え、おいしい、そして毎日の動き
  • 良いドキュメンテーション。Web サイトの jobeet チュートリアルは素晴らしいです。すべての機能を順を追って説明します。完了した後は、何でも構築できるように感じます。
  • 高度にモジュール化されています。多くの symfony コンポーネントは単独で動作します。
  • PropelまたはDoctrine のいずれかを ORM として選択できます。Doctrine は本当に素晴らしく、使いやすいです。
  • YAML または PHP でモデルを定義できますが、それはあなた次第です。構成ファイルを好まない人もいますが、YAML を避けたい場合は、構成ファイルの使用を実際に制限できます。
  • 更新された symfony cli (1.2 以降) は素晴らしいです。このバージョンの前は少し不安定でしたが、現在は非常によく文書化されており、予測可能な形式に従っています。
  • ruby on rails にはたくさんの、つまりたくさんの類似点がありますが、もちろん、PHP は Ruby(!) ほどきれいでも柔軟でもありません。しかし、ケーキの開発者と話すと、おそらく反対のことを言うでしょう:)
  • CRUD (symfony にも存在します) からのステップアップである symfony admin generator は、時間を大幅に節約しますデータ モデルを使用して、リスト ビュー (インデックス)、作成、および編集ページを備えたカスタマイズ可能な管理インターフェイスを生成します。ソースを生成し、それを変更する基本的な crud とは異なります...実際には、各フィールドの外観、含めるフィールド、各オブジェクトで実行できる追加アクションなどを定義できます。

概念的には、違いは次のとおりです。

  • CakePHP の学習曲線は小さくなります。MVC フレームワークを使用したことがない場合でも、Cake を簡単に習得して短時間で実行できます。
  • Symfony は少し「大きく」感じられます。遅いとは言えませんが、必要なときに非常に高度なことを実行できるコードがたくさんあります。

私ができる最善のアドバイスは、両方で独自の単純なデータ モデルをセットアップし、いくつかの基本的なインターフェイスを試して、自分のコーディング スタイルに最も適したものを見つけることです。どちらのフレームワークにも非常に活発で情熱的なユーザー コミュニティがあり、どちらの決定でも後悔することはないと思います。

于 2009-08-07T20:23:17.587 に答える
27
  • CakePHPの哲学は、RubyonRailsに似ています。
  • CakePHPは中規模のプロジェクトに適しています。
  • CakePHPは学ぶのが速いです。
  • CakePHPはsymfonyよりも軽いです。
  • CakePHPのデータベースインタラクションはCRUDを使用します。
  • CakePHPは、テストシステムPHPUnitを使用します。
  • CakePHPベイクと足場で面白いです。

  • symfonyの哲学はバージョンごとに異なるということです。
  • Symfonyの学習は遅いです。
  • Symfony'sは大規模なプロジェクトに最適です。
  • SymfonyのデータベースインタラクションはDoctrineを使用しています。
  • SymfonyはテストシステムPHPUnitを使用しています。
  • Symfonyのバンドルとテンプレートで興味深いです。
于 2012-01-24T23:23:30.260 に答える
22

大きな違いは、モデルの作成方法にあります。CakePHP モデルは PHP で記述され、Symfony モデルは YAML で記述され、Propel を使用します。CakePHP のアプローチは、ROR の ActiveRecord に似ています (正確には AR 実装ではありませんが)。一般に、CakePHP はより Rails 風です。

私の意見では、CakePHP のドキュメントとツールは対象読者が広く、構文とヘルパーはより簡単ですが、まだ PHP5 を排他的なターゲットとして受け入れていません (オートローディングは実際にはありません)。一般的に、私は CakePHP のアプローチを好みます。それは確立された標準に従っているからです。また、その組織を称賛します。PHP5 の良さから、Kohanaもお勧めします。

この質問については、スタック オーバーフローに関する別の投稿がありますが、焦点が少し異なります。


編集: Symfony を再検討して、私が「いいえ」と言った理由を見つけました。

CakePHP は非常に単純な足場と理解しやすい CLI ツールも提供します。Symfony の CLI 構文は私には少し不安定で、Symfony の「CRUD」はまったく同じではありません。それを Symfony の (厄介な) アクション構文と組み合わせて、Symfony の貧弱に設計された (そして理解するのが難しい) Web サイトを投入し、サードパーティの有料ドキュメント (Amazon の本) を好むと、短所の列により多くの目盛りが表示されます。

于 2009-08-06T23:32:50.077 に答える
15

上記の CakePHP と制限に関するいくつかの主張は、単に真実ではありません。クエリは可能です。あなたはそれを作る方法を知っていなければなりません。CakePHP の「オートマジック」は非常に優れているため、すぐに実行に移すことができます。これは、開発が最も速いフレームワークです (そのため、明らかに大きな成功を収め話題になった RoR に非常によく似ているのはそのためです)。異なる方法で返されるデータを取得し、いくつかの短いメソッド呼び出しと指定された配列パラメーターを使用してこれらのより複雑なクエリを作成する、より高度な動作があります。

でも。私が知る限り、これほど多くの "automagic" メソッドとクラスを備えたフレームワークは他にありません。Cake は最も一般的なタスクを実行し、それを簡単に実行する方法を提供します。あなたが本当に賢いなら、ほとんどのコーディングをモデル レベルで行い、app_model ファイルと app_controller ファイルを利用して、非常に効率的なアプリケーションを作成できます。

コンソールは素晴らしく、常に拡張しています。コミュニティは本当に素晴らしいものであり、物事をより速く進めるのに役立つ多くの貢献があります. 必要なもののほとんどが利用可能であるため、文字通り設計し、「ピース」を所定の位置に移動して、アプリを非常に迅速に構築できます。他のフレームワークでは得られません。通常、コーディングにはもっと多くの時間を費やす必要があります。

最後に。ドキュメンテーションは遅れていましたが、現在ははるかに改善されており、このドキュメンテーションの欠如とバージョン 1.1 の期間中、Cake はいくつかの厳しいレビューを受けました...それでも、ひどく見落とされていましたが、それでも良いものでした。1.2、そして今、Cake2 と Cake3 が間近に迫っているので、多くの意見が変化するのを見るでしょう。

私は1.1からCakePHPを使用しています。私はそれを固く信じています。巨大な企業サイトに使用しました。1 日あたり何百万ものヒットを受信する... WordPress や Drupal などのソリューションの領域からは外れています。CMS タイプのサイトがそのレベルに達したとき、CakePHP を導入できたことを非常に嬉しく思います。同様に、Symfony と CodeIgniter はスケーリングに役立ちます。どちらのフレームワークについても、悪いことは言えません。CakePHP を使用すると、コーディングに費やす時間が減り、より大きなコミュニティ (および非常にフレンドリーな IRC チャンネル) を見つけることができるとしか言えません。

于 2009-08-18T01:21:21.097 に答える
12

私は、CakePHP に関する上記のコメントに対する私の応答のいくつかと、(場合によっては正しく) 認識された欠点のいくつかを調べて文書化しています。

大規模な Web サイトは CakePHP を使用して運営されており、Mozilla Addons、MIT による Scratch、Hot Scripts などがあります。CakePHP Web サイト ( http://cakephp.org ) の一番下に、より大きなリストがあります。いずれにせよ、優れた開発者であれば、フレームワークが完全にばかげていない限り、フレームワークを使用してスケーラブルな Web サイトを構築できるはずです (CakePHP はそれほどばかげているわけではありません :D )。

フレームワークのすべての機能を網羅した非常に優れた (無料の) CakePHP チュートリアルが 1 つもないことは事実ですが、ドキュメントは非常によくレイアウトされており、詳細です。不明な点は、Google グループと IRC で解決できます。ドキュメントのあらゆる変更や修正を歓迎します。多くのことがアプリケーション固有であり、人々は興味深いヒントやトリックを考え出すため、ドキュメンテーションは単なる開発者の問題ではありません。もちろん、それはすべてモデレートされているため、粗悪/スパムのほとんどは追加されていません。

コードはモジュラーであり、コア機能を置き換える新しいコードを追加できます。コードの大部分は単純な PHP クラスです。そのような機能を書くのは負担になるかもしれないのは事実です。はい、それは他の ORM を処理しないので、デフォルトのままにしていますが、これは Cake3 で修正する必要があります。Cake3 では、他の PHP クラスを自由に組み合わせて一致させることができます (これには Propel と Doctrine のサポートが含まれます)。

CLI は非常に優れており、アプリ固有のサポートのために簡単に拡張できます。1 つの例は、最近、github からインデックスを作成した他の CakePHP プラグインを自動的にインストールするシェル プラグインを開発したことです。非常に使いやすく柔軟なものを構築するのに約 5 時間かかりました。そのような機能はSymfonyに存在すると確信しており、RoRにも存在します:)

Rails ライクであることと、そうでないことです。多くの点は似ていますが、結局それらは MVC フレームワークであり、CakePHP は「規約と構成」のアプローチを採用しています。PHP4 のサポートは、Symfony が PHP5 のみをサポートしているため、より優れた構文を備えていますが、それでも非常に使いやすく直感的です。このフレームワークは、そのままの状態で Rails のすべての機能を提供するわけではありません。CakePHP はフレームワークであり、ライブラリーではありません (こんにちは Zend)。

ビューの生成は、同意しますが、CakePHP では少し不安定です。これは、CakePHP 1.3 および 2.0 で大幅に強化されています。これは、すべてのモデル、ビュー、およびコントローラーのカスタム テンプレートをサポートします (現在のように単なるビュー タイプとは対照的です)。また、neilcrookes のユーザーによる一連のシェル タスクが github に存在し、特定のタイプのビュー (管理ビューのみを含む) のみを自動ベイクし、カスタム テンプレートと組み合わせて使用​​して、必要なものを正確に生成できます。CSS スタイリングも役立ちます :) しかし、これは間違いなく改善できるものです。

CakePHP は Model::find メソッドでさまざまなパラメータを取りますが、生の SQL クエリを使用すると便利な場合もあります。Model::find() メソッドは非常に柔軟で、複雑な検索結果を作成する限り、失敗したことはありません。それは、必然的に常に時間がかかる ORM に慣れていることに関係していると思います。

フォームの検証は、データベースに関連するすべてのアクションが実行される場所であるため、論理的にはモデル層にある必要があります。私が信じている特定のビューで代替検証を指定するか、検証を交換することができます (これには動作がありますが、それなしではそうするのは難しくありません)。

多次元配列は少しばかげていますが、それでも多次元オブジェクトがある可能性があります。PHP4 には壊れたオブジェクト モデルがあり、それが CakePHP がオブジェクトを使用しない理由です。これは、CakePHP の将来のバージョンで修正されますが (以前のコメントで指摘したように)、場合によっては PHP4 をサポートするフレームワークがあると便利です。繰り返しますが、YMMV と私は、アプリケーションと開発の両方の速度において、完全な PHP5 が大きな恩恵をもたらすことに同意します。

データベースは自由に交換できます。CakePHP は、1 つのタイプの DB のみに固有の機能を許可していません (したがって、MySQL のみにある ENUM のサポートは廃止されました)。そのため、ORM は常にサポートされ、常に有効なクエリを構築できます。必要に応じてモデルごとに 1 つずつ、アプリケーションに複数のデータベースを含めることができ、それらを自由に交換したり、特定のモデルに対してデータベースをまったく使用しないことさえできます。いいえ、特定のデータベースに関連付けられていません。

結局のところ、選択はあなた次第です。両方を調べてドキュメントを読み、グループ、IRC チャネル、ブログ、および両方のフォーラムをチェックして、どのフレームワークがあなたの開発スタイルに最も適しているかを確認することを心からお勧めします。読者は気をつけてください、私は CakePHP の開発者なので、投稿には偏りがあります。

于 2009-08-13T09:22:44.577 に答える
9

既存の回答に加えて、可能であれば両方を試してください。私は両方をかなり使用しており、しばらくして symfony を好むようになりました。

しかし、それはどちらかが優れているからではなく、symfony がたまたま私の心の働き方に合っているためであり、フレームワークの外でソフトウェアを書くときに私が行うことに近いため、より直感的に感じられるとかなり確信しています。他の人は、自分の心が別のフレームワークのパラダイムに適合していることに気付くかもしれないと期待しています.

そうは言っても、オブジェクトではなく配列を使用しているため、cakephp のオブジェクトは弱点だと思います。(これは、私が困難なことをする必要があるときはいつでも、定期的に私の中で激しい憎しみに発展するものです... !) それらはまったく同じことを行うことができますが、データを表すために配列ではなくオブジェクトを返します。私が抱えていた問題は解消されます。既存のモデル クラスに関数を記述して配列を渡すのではなく、データ オブジェクトに機能を追加して、やりたいことを実現できます。

于 2009-08-08T08:55:06.157 に答える
6

もう 1 つの違いは次のとおりです。Symfony は 3 つの環境に分離されています: 開発、運用、およびテスト - CakePHP はできません! 製品の開発とテストを同時に行うのは簡単です

于 2010-12-06T15:09:45.090 に答える
6

The model layer of CakePHP is a mess. Try doing simple things like a many-to-many relationship between a Category and an Item object and then retrieve all the Items in a Category that have a specific property set.

Like:

SELECT items.* FROM items, categories, item_categories WHERE item.available=1 AND category.id=1 AND item_categories.category_id = category.id

Something so trivial is not possible in one statement in cake with the find() method of a model.

There is also no way in the core API to add a single many-to-many relationship as in one item to the item_category table above. There are a couple solutions online including a behavior that someone posted in the bakery (http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior), but that's just stuff that any good ORM framework like Propel, Torque(Java), Hibernate(Java), SQLObject(Python), SQLAlchemy(Python) support right out of the box. Basically you're either going to have to write a lot of PHP code to add those missing features or use raw SQL queries but the main purpose of a framework is to avoid doing those things so that you can focus on the application that you're writing so you're not really gaining much with CakePHP.

There are a bunch of other problems and they all really have to do with the model layer including the form validation being tied into the model layer, having to deal with messy multidimensional arrays, having to use raw sql and tying your app to a specific database.

I would say use symfony. It's a bigger framework might take a few days longer to learn but it will be well worth it. I was going to use CakePHP for a project that I am working on, after running to too many of those types of issues I switched to symfony and it's been smooth sailing.

于 2009-08-13T05:51:16.173 に答える
4

Cake 2.0 は必要なクラスのほとんどを適切に自動ロードしますが、Symfony 2 では、すべてのクラスがスクリプトの先頭に多数のインポートを持たなければならないことがわかりました。これらすべてのインポートを暗記しようとすることはほとんど不可能であるため、いつでも便利なリファレンスが必要です。

例えば。Symfony 2 コントローラーのコード...

namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
// bunch of other imports accumulate here...

class HelloController {
    ...

ああ、うん。これは純粋主義者にとっては優れた OO テクニックかもしれませんが、開発時間が長くなります (bye bye RAD)。少なくとも Cake を使えば、簡単なことのほとんどを記憶からすばやくコーディングできます。

于 2012-02-28T22:20:31.720 に答える