この記事はCakePHPチュートリアルの中でも最も古典的と言えます。完全なステップバイステップのシリーズではありませんが、著者が CakePHP を使用した自身の経験を 21 項目にまとめており、特に初心者にとって非常に役立ちます。
翻訳の際、コントローラー、モデルなど、CakePHP に特有のいくつかの単語を意図的に未翻訳のままにしました。 CakePHPを学んだ人ならすぐに意味が理解できると思います。
さらに、CakePHP の wiki は期限切れになり、bakery という Web サイトに置き換えられました。 元の記事で引用されている wiki へのリンクもベーカリーに更新されました。
静的ページを素早く作成
静的データのみを含み、デフォルトのレイアウトを使用し、モデルを必要としないページをいくつか作成したいと考えています。 最初に、コントローラーを作成し、静的ページごとにアクションを定義しようとしました。 ただし、この方法は不器用で、静的ページを迅速に作成するのには適していません。
実際には、pages コントローラーを使用してこれを行うことができます。views/pages フォルダーの下にビューを作成し、/pages 経由でアクセスするだけです。たとえば、/views/pages/matt.thtml を作成しました。これには http://www.example.com/pages/matt からアクセスできます。
固定ページのタイトルを変更します
ページ コントローラーを使用するときにページ タイトルを変更したい場合は、次のコードをビューに追加するだけです:
pageTitle = ページのタイトル。;
静的ページのレイアウトにデータを送信しますレイアウトにデータ (ナビゲーション バーのどの部分を強調表示するかを示す変数など) を渡す必要がある場合は、次のコードをビューに追加できます。
_viewVars[somedata] = array(some,data) ?>
この配列はレイアウト内の $somedata を通じてアクセスできます。
バックグラウンド管理を素早く作成する
バックグラウンドマネージャーを作成する必要があり、すべての管理アクションを特定のフォルダーに配置したい場合は、config/core.php を開いて次の行のコメントを解除します。
define(CAKE_ADMIN, 管理者);このように、「admin_」で始まるすべてのアクションは、/admin/yourcontroller/youraction からアクセスできます。たとえば、投稿コントローラーに「admin_add」という名前のアクションを作成した場合、www.example.com/admin/posts/add を通じてこのアクションにアクセスできます。このようにして、管理ディレクトリにパスワードを簡単に設定して、他人が勝手にアクセスできないようにすることができます。
バックグラウンドで実行された SQL ステートメントを表示する
config/core.php の DEBUG 定数を変更するだけで、バックグラウンドで実行される SQL ステートメントを確認できます。 0 は製品レベル、1 は開発レベル、2 は SQL のデバッグが完了、3 は SQL のデバッグが完了し、オブジェクト データが表示されます。 通常、DEBUG を 2 に設定して、SQL デバッグ情報を含む表が各ページの下部に表示されるようにします。
ページの下部に追加されたテーブルによってページのレイアウトが崩れる場合(特に Ajax を使用してページを取得し、下部ではなくページの中央に表示する場合)、CSS に次のコードを追加して非表示にすることができます。デバッグ情報:
#cakeSqlLog { 表示: なし }
こうすることで、ページレイアウトを維持したり、ソースコードを閲覧することでデバッグ情報を確認したりすることができます。 もちろん、最終的に Web サイトを公開するときは、デバッグ レベルを 0 に戻すことを忘れないでください。
豊富な開発ドキュメントを入手
いつもマニュアルを見ないでください。 Wiki と API も非常に貴重です。 Wiki の開発ガイドは非常に便利で、API ドキュメントは最初は難しそうに見えますが、ここにある情報が CakePHP Web サイトを作成するのに非常に重要であることがすぐにわかります。 `
bake.phpを使用する
Bakeはデータベースに基づいてモデル、コントローラー、ビューを自動生成できるコマンドラインのPHPスクリプトです。開発の初期段階では、スキャフォールディングを使用してプロトタイプ プログラムを実行することを強くお勧めします。ただし、足場が適切ではないことが明らかにわかっている場合は、ベイクを使用することをお勧めします。 Bake はすべてのファイルを生成し、それらをディスクに保存して、自由に変更できるようにします。これにより、関連付け、ビュー、および基本的な CRUD スクロールダー操作を作成する繰り返しの作業が節約されます。
(訳者注:CRUD - データベースアプリケーションの4つの基本操作、つまり「追加、削除、確認、変更」の作成、読み取り、更新、削除)
Bakeはとても便利です。データベースにテーブルを作成し、/cake/scripts/ ディレクトリで php bakery.php を実行するだけです。
インタラクティブにベイクを実行すると、いくつかの手順でモデル、コントローラー、ビューを作成するように求められます。 作成後、私は通常、生成されたコードをすべて読み取り、必要な変更を加えます。
プログラムを公開するときは権限に注意してください
かつて、プログラムを公開するときに、cake ディレクトリ全体をパッケージ化し、scp を使用してサーバーにアップロードしました。デバッグ情報がオフになるとすぐにエラーが発生します。データベース呼び出しはデータを返すことができません。問題をデバッグするにはデバッグ情報を確認する必要があるため、途方に暮れています。後で誰かが、/app/tmp は Apache で書き込み可能であるべきだと教えてくれました。権限を 777 に変更すると、問題は解決しました。
複雑なモデルの検証
入力ボックスが空ではない、または特定の正規表現に一致するという単純な検証だけではなく、より複雑な検証を実行する必要があります。 たとえば、ユーザーがサインアップした電子メール アドレスがすでに使用されているかどうかを確認したいとします。 Wiki で高度な検証に関するこの記事を見つけました。この記事には、非常に便利な高度な検証方法がいくつか記載されていました。
エラーログを記録する
$this->log(何かが壊れました);
これにより、エラーが /tmp/logs/ に記録されます (当初は、Apache のエラー ログに記録されると思っていました)。
コントローラーに他のモデルを使用させます
コントローラーが異なるモデルからデータを呼び出す必要がある場合は、コントローラーの先頭で次のコードを使用するだけです:
クラス yourController extends AppController {
var $uses = array(Post,User);
}
これにより、コントローラーはPostモデルとUserモデルにアクセスできるようになります。
データベーステーブルを使用しないモデルを作成する
テーブルを使用しないモデルを作成する必要があります。たとえば、$validate 配列を通じて入力データを簡単に検証し、モデル ロジックの正確さを維持したいと考えています。しかし、モデルが作成されるとき、対応するテーブルが存在しないため、CakePHP はエラーを報告します。 この問題は、次のコードをモデルに追加することで解決できます。
var $useTable = false;
この方法でモデルに対応したテーブル名を変更することもできます。
var $useTable = some_table;
リダイレクト後は忘れずに exit() を実行してください
経験豊富な人にとって、これは当然のことです。 $this->redirect() を呼び出した後、実行したくない場合は、残りのコードを exit() する必要があります。私もこれを行っていますが、以前は $this->redirect() が exit を呼び出すだろうと考えていました (実際には呼び出されません)。
先進モデルの機能
APIを見てみると、あなたの知らないとても便利な機能がたくさんあります。 Model クラスのリファレンス マニュアルを少なくとも 1 回は読むことを強くお勧めします。 これまで気付かなかった重要な機能をいくつか紹介します:
*generateList() - 主に選択ボックスに必要なデータを生成するために使用されます () * query() - 独自の SQL ステートメントを作成してクエリを実行 * findCount() - 指定された条件を満たす行の数を返します * hasAny() - 条件付きで true を返すレコードがある場合は、モデル クラスのリファレンス全体を読むことを強くお勧めします。学習内容に驚くでしょう。複数の行を正しく挿入する方法 リストを反復処理し、リスト内の各要素をデータベースに挿入する必要があります。 1 つの挿入が完了した直後に次の挿入を実行すると、2 番目の挿入の内容はまったく挿入されず、最初に挿入された行に更新されることがわかりました。 例: $items = array(Item 1,Item 2,Item 3); foreach ($items as $item) { $this->Post->save(array(Post => array(title => $ item))); } このコードは、posts テーブルに「Item 3」という 1 つの行のみを挿入します。 CakePHP は最初に「Item 1」を挿入しますが、すぐにそれを「Item 2」に更新し、次に「Item 3」に更新します。これは、$this->Post->id が最後に正常に挿入された行の ID を保存するためです。通常、この機能は便利ですが、この場合は役に立ちません。実際、この問題は、挿入のたびに $this->Post->id = false を設定することで解決できます。更新: 誰かが私に電子メールを送ってきて、正しい方法は create() を呼び出してモデルを初期化し、新しいデータを設定/保存することだと教えてくれました。コントローラー関数の前後にロジックを挿入する コントローラーによってレンダリングされるすべてのビューでカラー配列を設定する必要があるが、すべてのアクションでカラー配列を定義したくないとします。これは、 beforeRender () コールバック関数を通じて実現できます: function beforeRender () { $this->set(colors,array(red,blue,green); } } このようにして、コントローラーによってレンダリングされたすべてのビューは、 $colors 変数。beforeRender () 関数は、コントローラー ロジックが完了した後、ビューがレンダリングされる前に実行されます。同様に、beforeFilter() 関数と afterFilter() 関数は、各コントローラー アクションの前後に実行されます。マニュアルの WYSIWYG エディター ここに、CakePHP で TinyMCE を使用する方法に関する優れたチュートリアルがあります。基本的には、ページ上に tiny_mce.js ファイルをリンクし、どのテキストエリアが TinyMCE エディターになるかを設定するだけです。カスタム HABTM 関係の SQL ステートメント カスタム SQL ステートメントで HABTM 関係 (has-and-belongs-to-many) を定義しようとしましたが、問題が発生しました。この記事の執筆時点のドキュメントによると、次のようになっているはずです。最初に独自のモデルで finderSql を設定しますが、CakePHP のソース コードから finderQuery を設定する必要があります。これはドキュメントにある小さな問題ですが、ここで指摘していただくと他の人の時間を節約できます。 Wiki で 2 つのチュートリアルを見つけました。メールの送信と PHPMailer を介したメールの送信は、より安全であり、メールのヘッダーを自分で処理する必要がないため、後者を強くお勧めします。ヘルパーによって生成された HTML。デフォルトの空白オプションの代わりに「選択してください」オプションを生成するように $.html->selectTag() の呼び出しを変更する必要があります。また、ユーザーがラベルを付けられるようにする必要があります。ラジオ ボタン自体を正確にクリックする必要はありません。関連するテキストをクリックして /app/config/tags.ini.php を作成し、次の内容を追加します: input type=radio タグのタグ テンプレート = "%s。 「
; 空の選択オプション タグのタグ テンプレート。
selectempty = "--選択してください--"完全なタグリストは/cake/config/tags.ini.phpから取得できます。ただし、このファイルを変更することはお勧めしません。変更すると、CakePHP をアップグレードするときに変更内容が失われる可能性があります。
カスタマイズされた 404 ページ
404 ページをカスタマイズする必要がある場合は、/app/views/errors/error404.thtml を作成するだけです。