Cake PHP フレームワーク [转]

WBOY
リリース: 2016-06-23 14:36:30
オリジナル
807 人が閲覧しました

リリース時期: 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

...

...


これは単純すぎますね。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!