リリース時期: 2005-10-19 これは PHP に基づいたフレームワークです。その作成者は、Cake PHP フレームワークの設計アイデアは、データベース接続、テンプレート、生成されたリンクをカプセル化する、Ruby on Rails に似た非常に最近の Ruby フレームワーク である 37signals の Ruby on Rails から生まれたと述べました。最大の機能はデータ操作なので、自分で多くのコードを記述する必要はありません。 Ruby on Rails と同様に、データ テーブルを生成するのに必要なコードは 1 行だけです。 Cake PHP フレームワークのもう 1 つの大きな利点は、軽量なフレームワークであることです。一見すると魔法のように見えますが、コードをよく見ると理解しやすく、特別なことは何もありません。開発と使用は実にユニークで実用的かつ効率的です。データベースベースの PHP システムを構築している場合、これは検討する価値のあるオプションです。 Cake チュートリアルを見て、Cake PHP フレームワークを使用して Web アプリケーションを構築することがいかに速くて便利かを理解してください。数分で簡単にブログプログラムを作成する例を紹介しています。 PHP の世界がますます面白くなってきました(笑)。 ダウンロード 最新の Cake パッケージをダウンロードし、Web サーバーの DOCUMENT_ROOT に解凍します (この記事はガイドであるため、http://localhost/cake/ からアクセスできることを前提としています)。基本的なディレクトリ構造が確認できます。 データベースの作成 ブログ投稿を保存するテーブルを作成し、いくつかのデータを初期化します。 SQL ステートメントは次のとおりです。 CREATE TABLE jobs ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, updated DATETIME DEFAULT NULL );にposts ( title,body,created) VALUES ('タイトル', 'これが投稿の本文です。', NOW()); INSERT INTO 投稿 (title,body,created) VALUES ('タイトルをもう一度' , ' そして投稿の本文が続きます。', NOW()); INSERT INTO 投稿 (title,body,created) VALUES ('タイトルの逆襲', 'これは本当にエキサイティングです! 違います。', NOW()); テーブル名は複数形であることに注意してください。これは、Cake で使用されるすべてのテーブルのデフォルト形式です。また、id、created、updated フィールドには特別な意味があり、しばらくするとわかります。つまり、今は名前を変更すべきではありません。 Cake のデータベース設定を構成する データベース アクセスを構成するには、config/database.php.default を編集し (独自の指示が含まれている必要があります)、config/database.php が存在しない場合は、それを config/database.php として保存します。 , Cake は引き続き実行され、データベースへのアクセスは使用されません。 モデル クラスを作成します (MVC のモデル) 次に、posts テーブルのモデル クラスを作成し、次の内容を含む新しい app/models/post.php を作成します。 app/models/post.php < ?php class Post extends AppModel { } ?> Cake がモデルに注目し、それをロードし、データベース テーブルに接続するにはこれで十分です。注: モデル クラスのクラス名は単数形です。命名規則に従うことが重要です。そうしないと、Cake が自動的に実行されないからです。デフォルトでは、モデル クラスとデータベース テーブルに同じ単語が使用され、前者は単数形、後者は複数形になります。 コントローラー ヘルパー クラスを作成する 新しいコントローラー ヘルパー クラスを作成します。次の内容を app/helpers/posts_helper.php に入れます: app/helpers/posts_helper.php class PostsHelper extends AppController { } ?> コントローラークラスを作成します。 (コントローラー) 新しいコントローラー クラスを作成し、app/controllers/posts_controller.php に次の内容を追加します。 app/controllers/posts_controller.php class PostsController extends PostsHelper { } ?> 保存されたデータを操作するためのアクションをコントローラーに追加する必要があります。 PostsController クラスにメソッドを追加します: app/controllers/posts_controller.php class PostsController extends PostsHelper { functionindex() } } ?> PostsController:: index() はテンプレート (Cake では「ビュー」と呼ばれます) のみを必要とします。 ビューを作成する 次のコードを app/views/posts/index.thtml に入力します:
ブログ投稿 <表>タイトル
id']}")? >> php endforeach; ?>
これは正しく実行されるはずです。テストしてみましょう。 http://localhost/cake/posts/index を指す http://localhost/cake/ を参照することで Cake ディレクトリにアクセスできると仮定して、新しいコントローラーをテストします。次のような内容が表示されると思います:
ブログ投稿
ID タイトル 作成されました
1 タイトル 2005-07-03 10:52:21
2 もう一度タイトル- 03 10:52: 34
3 タイトルの逆襲 2005-07-03 10:52:43
なぜ見なかったのですか? ?
「見つかりません: 要求された URL /posts/index がこのサーバー上に見つかりませんでした」というページが表示された場合は、http://localhost/cake/index.php?url=posts Access を使用するとよいでしょう。明らかに、これは美しくありません。 「致命的なエラー: 非オブジェクトのメンバー関数を呼び出します...」というページが表示された場合は、構成内容を確認して、config/database.php.default を config / に変更したかどうかを確認してください。トラブルシューティングと解決策については、ブログ ガイドを参照してください。
私たちは今何をしましたか?
見直してみましょう。データベーステーブルのposts、モデルクラスPost、コントローラーPostsControllerとそのindex()メソッド、およびビューファイルapp/views/posts/index.thtmlを作成しました。彼にとってそれは全く難しいことではないと思います。続けていきましょう。
投稿タイトルは/cake/posts/view/[post_id]に繋がっていますのでクリックしてみましょう。
アクションがありません
アクションがコントローラーの投稿で定義されていないため、このエラーが表示されます
注意: このエラーは app/views/errors/missing_action.thtml ビュー ファイルによって表示されます
ユーザーがカスタマイズ可能なエラー ページ無効なアクションのディスパッチを処理しています。
エラー: 投稿でアクションを実行できません
ところで、PostsController::view() 動作を追加するのを忘れていました。今すぐ終了しましょう:
app/controllers/posts_controller.php
class PostsController extends PostsHelper
{
functionindex()
}
を使用してください「を通じて」を通じて' を通じて ' を使用して
this->models['post']->setId($id);
$this->set('data', $this->モデル['post'] - &gt; read()); ;?php echo $data['title']?>
作成済み:
ブラウザに戻って更新してください: タイトル 作成日: 2005-07-04 03:31:47 これが投稿の本文です 成功しました。 追加機能 ガイドの最初の部分が完了すると、投稿のリストが表示され、投稿を表示できるようになります。 2 番目の部分が完了すると、次のことが可能になります: 新しい投稿を追加します。 不要な投稿を削除します。 既存の投稿を編集します。 新しい投稿を提出する新しい投稿: p/controllers/posts_controller.php ; その他 保存しました。','/posts') ; $this->set('data', $this-> params['data']); this->models['post']) ; } ?> 同時動作のテンプレート ファイルは: app/views/posts/add.thtml
投稿をブログに追加 ?php echo $html->formTag('/posts/add')?>
Title : inputTag('post/title', 40)?> tagErrorMsg('post/title', 'タイトルは必須です。') ? >
本文: areaTag('body') ?> tagErrorMsg('post/body' , '本文は必須です。') ?>
これでできるようになりますアドレス「/cake/posts/add」で追加ページにアクセスするか、インデックス ページの下部にあるショートカット「追加」を追加します。新しい投稿」リンク:
app/views/posts/index.thtml
ブログ投稿
ID タイトル 作成 post->findAll() as $post): ?>
linkTo($post['title'], "/posts/view/{$post['id']}")?> 表>
linkTo('新しい投稿を追加', '/posts/add') ?>
在让我们试书いくつかのノートを追加しました。このような不当な行為を避けてください
データ有能性
データ有能性
app/models/post.php
class Post extends AppModel
{
var $validate =配列(
'タイトル'=>VALID_NOT_EMPTY,
'本文'=>VALID_NOT_EMPTY);
}
?>
API 文内の内容は、有効な検出器の内容に関連しています。
删除一帖子
app/controllers/posts_controller.php
class PostsController extends PostsHelper
{
関数インデックス()
{
}
function view($id)
{
$this->models['post']->setId($id);
$this->set('data', $this->models['post']->read());
}
function add()
{
if (empty($this->params['data']))
{
$this->render();
}
else
{
if ($this->models['post']->save($this-> ;params['data']))
{
$this->flash('あなたの投稿は保存されました。','/posts');
}
else
{
$ this&gt; set($ this&gt; param $ this&gt; . '削除されました。'、'/投稿');削除が成功すると、簡単なメッセージ (いわゆる「フラッシュ」) が表示され、インデックス ページに戻ります。
各ブログ投稿ビューに削除アクション リンクを追加します。
app/views/posts/index.thtml
ブログ投稿 投稿->findAll() as $post): ?>
> linkTo($post['title'], "/posts/view/{$post['id ']}")?>linkTo('削除',"/posts/delete/{$post['id']}", null " 「{$post[」というタイトルの投稿を削除してもよろしいですか? 'title']}'?" )?>
linkTo('新しい投稿を追加', '/ photos/add') ?>
完了したら、タイトルが空白の投稿を削除できます。
投稿を編集する
app/controllers/posts_controller.php
class PostsController extends PostsHelper
{
use using using ' s ' through using ' s ' through ' through ‐ ‐ ‐ ‐ ‐ ‐ 関数ビュー($id)
;models['post']->setId($id);
$this->set('data', $this->models['post']->read() )
関数add() {
$this->render();
}
else
{
if ($this->models['post']->save($this-> ;params['data']))
{
$this->flash('あなたの投稿は保存されました。','/posts');
}
else
{
$this->set('data', $this->params['data']);
$this->validateErrors($this->models['post']);
$this->render();
}
}
}
function delete($id)
{
if ($this->models['post']->del($id))
{
$this->flash(' ID: '.$id.' の投稿は削除されました。', '/posts');
}
}
function edit($id=null)
{
if (empty($this->params['data'])) {
$this->models['post']-> ;setId($id);
$this->params['data']= $this->models['post']->read();
$this->render();
}
else
{
$this->models['post']->set($this->params) ['データ']);
if ( $this->models['post']->save())
{
$ this->flash('投稿が更新されました。','/posts');
}
else
{
$this->set('データ', $this->params['データ']);
$this->validateErrors($this->models['post']);
$this->render();
}
}
}
}
?>
app/views/posts/edit.thtml
ブログへの投稿を編集 formTag('/posts/edit')?>
タイトル: inputTag('post/title', 40)?> tagErrorMsg('post/title', 'タイトルは必須です。') ?>
areaTag('body') ?> tagErrorMsg('post/body', '本文は必須です。') ?>
submitTag('Save') ?>
フォーム>
你も表单标签中で使用できます
hiddenTag('id')?>
HTML を直接使用する
チェックの代わりに、index.thtml に、私が追加したリンク:
ブログ投稿 ID タイトル 作成 post->findAll() as $post): ?>
linkTo($post['title'], "/posts/view/{$post['id']}")?> linkTo('Delete',"/posts/delete/{$post['id']}", null, "「{$post」というタイトルの投稿を削除してもよろしいですか? ['タイトル']}'?")?> linkTo('Edit',"/posts/edit/{$post['id']}")?> 表>
linkTo('新しい投稿を追加', '/posts/add') ?>
从影中分离逻辑
让我们回头看一下index.thtml 影:
app/views/posts/index.thtml
...
post->) ;findAll() as $post): ?>
...
findAll() 呼び出しをビューから削除し、コントローラーに配置する必要があります。これにより、ロジックとビューがより適切に分離されます。次に、ビューのコントローラーからデータを取得します。今すぐやりましょう。
投稿コントローラーでは、投稿モデルからすべてのレコードを取得し、変数データに保存します。
app/controllers/posts_controller.php
...
function Index ()
{
$this->set('data', $this->models['post']- >findAll());
}
...
?>
同時に、ビューでデータの各行を反復処理して、そのすべての内容を表示します。
app/views/posts/index.thtml
...
...
これは単純すぎますね。