12

私の意図は、比較を行ったり、どのフレームワークが優れているかを議論したりすることではありません。私は CakePHP と Rails の両方の力を知っています。両方で同様のことを行う方法があると確信しています。

つまり、これが状況です。Rails フレームワークでは、CakePHP でやりたいことをするのに慣れています (ドキュメントに載っていないものもあります)。

彼らです:

パッケージ管理

Rails には、アプリケーションで使用される各「gem」のバージョンを書き込む「Gemfile」ファイルがあります。アップグレードまたはダウングレードする場合は、バージョンを変更して「bundle update」コマンドを実行します。プラグインはどのように更新しますか? GIT などのツールを使用して、それぞれを新しいバージョンにチェックアウトしていますか?

移行

データベースを変更する必要がある場合は、コンソール コマンド「rails generate migration」で空の「migration」ファイルを作成します。次に、生成されたファイルに、「rename_column :users, :address, :location」などの変更を追加します。その後、「rake db:migrate」を実行すると、データベースが移行されます。CakePHP でそれを行う方法は?

自動導入

Rails へのデプロイは、"Capistrano" ruby​​ gem を使用して自動化できます。基本的に、コマンドラインで「cap production deploy」を実行します。次に、「deploy.rb」ファイルの指示に基づいて、サーバーにログインし、git リポジトリから最新バージョンのコードを複製し、現在のリリースをバックアップするので、ロールバックできます。また、「共有」フォルダー (ユーザーのアップロードなど) のシンボリック リンクの作成、アセットの再コンパイル、保留中の移行の実行、新しい依存関係のインストール、一部のサーバー プロセスの再起動、アプリケーション自体の再起動、その他のコマンド ライン タスクの実行も可能です。CakePHP に似たようなものはありますか?

資産圧縮

Rails では、本番モードのときに、CSS および JS アセットが自動的に 1 つのファイルにコンパイルされ、デプロイのたびに再生成されます。これは Rails 3.1+ のネイティブ機能です。それはCakePHPで可能ですか?

ワーカーとバックグラウンド ジョブ

Rails は「delayed_job」と呼ばれる gem を使用して、たとえばユーザー サインアップ後に電子メールを送信するなど、「ワーカー」によってバックグラウンドで実行されるタスクをキューに入れることができます。どうやってそれをしますか?

コントローラーの名前空間

管理インターフェイス、Web サービス (たとえば "api" 名前空間を使用)、または "mobile" 名前空間を作成する場合は、"controllers" フォルダーにそれぞれのフォルダーを作成するだけです。次に、そこにコントローラーを配置し、それらにアクセスするためのルートを作成します。Cakeでそれを行う最良の方法は何ですか?

ビューからモデル メソッドにアクセスする

データベースからデータを取得すると、真の「オブジェクト」ではなく、CakePHP が連想配列を返すようです。そのため、モデル メソッドにアクセスできません。私の UserModel クラスが、誕生日に基づいてユーザーの現在の年齢を計算する「age」というメソッドを提供するとします。Rails では、ビュー <%= @user.age %> でこれを行うことができました。Cake でそれを行うためのビュー ヘルパーを作成する必要がありますか? 同様に calc_user_age($user); ?> (またはそのようなもの) ? 別の状況: ユーザーから最後のコメントを取得し、コメント内に、投稿のタイトルを使用して関連する投稿へのリンクを挿入するとします。Rails では、@user.comments.last.post.title のようにして投稿のタイトルを取得します。多くの不要なデータを取得する「recursive=3」機能を使用せずに、Cake でそれを行うにはどうすればよいでしょうか?

モデル スコープの連鎖

Post というモデルがあるとします。Rails では、モデルにスコープを作成して、好きなように組み合わせることができます。たとえば、「プログラミング カテゴリから最後に公開された 5 件の投稿をアクセス数の多い順に並べた」を取得したい場合は、次のように呼び出します。 )」。ページネーションと統合された最近の投稿の下書きのみが必要な場合は、「Post.drafts.recent.page(2)」を呼び出します。CakePHP でスコープを作成してチェーンする最良の方法は何ですか? 条件の配列を動的に構築し、それを「検索」のパラメーターとして送信しますか?

テスト

CakePHP コミュニティが採用しているテストツールは何ですか? モデルとそのメソッドをテストし、コントローラーとその応答と変数をテストし、ビューのコンテンツ (Javascript の相互作用も) をテストし、フィクスチャーを作成する必要があります。自動テストのようなものを作成する方法があるかどうかもわかります。ファイルの保存後にテストを実行します。

さて、基本的にはこれらがポイントです。長い投稿と、エラーが発生しやすい冗長な英語で申し訳ありません (私はネイティブ スピーカーではありません)。また、私は専門家ではありません。だから、ここに間違ったことを書くことができます。

良い会話ができることを願っています。ありがとうございました!

4

1 に答える 1