cakePHPを使った掲示板作成メモの続きの続き   no comments

Posted at 6:17 pm in computer,サイト

cakePHPを使った掲示板作成メモ
cakePHPを使った掲示板作成メモの続き

の続きです。長編になってきました。

次に自分以外には編集や削除はさせたくない、ということで、編集や追加のページに認証をかけたいと思います。
Authコンポーネントというのを使うと楽ちんらしいので、もちろんこれを使うことにします。
ですが、デフォルトのまま使うにはUserモデルというのを別に作らんといかんらしいのです。
名前はわりとどうでもいいとして、まずはusersテーブルを作成します。
デフォルトの名称は決まっているみたいなので名前は変えちゃいけません。自分の意見を通すよりはおとなしく従っておいた方が楽できますね。

テーブルはこんなかんじ。


CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`created` DATETIME NOT NULL ,
`modified` DATETIME NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET=utf8;

次にコードを追加していきます。

モデル(C:\wamp\www\cakephp\app\models)に
user.phpを追加します。

中身はこんなの。


class User extends AppModel {
var $name = "User";
}

コントローラ(C:\wamp\www\cakephp\app\controllers)に


users_controller.php

を追加します。中身はこんなの。


class UsersController extends AppController {
var $name = "Users";
var $scaffold;
var $components = array("Auth");
function beforeFilter() {
$this->Auth->allow(array("add"));
}
function login() {
}
function logout() {
$this->redirect($this->Auth->logout());
}

}
?>

$scaffoldを使うことによってCakePHPにすでに用意されてあるユーザー追加のページを使用することができるようになります。

ユーザーを追加するには

http://localhost/cakephp/users/add

にアクセスすればいいみたいです。

自動的に作成されるadd

自動的に作成されるadd

で、認証しないページは


$this->Auth->allow(array("add"));

の部分に追加してやればいいみたいです。

ログインページは用意されていないようですので、
ビュー(C:\wamp\www\cakephp\app\views\users\)に

login.ctp

を作成します。中身はこんなの。


echo $form->create("User", array("action"=>"login"));
echo $form->input("username");
echo $form->input("password");
echo $form->end("submit");
?>
ログイン画面

ログイン画面

ログアウトビューページはいきなりリダイレクトするので作成しません。

そして、もともとのmemoコントローラについても追加します。


var $components = array("Auth");

function beforeFilter() {
$this->Auth->allow(array("index"));
}

そしてbeforeFilter()を追加します。ここではindexページは認証なしでみることができるようにしていますが、これはすべてのページで認証させる場合は必要ないと思います。

これでページにアクセスすると自動的にユーザー認証ページに飛ぶことになります。認証に成功したらアクセスしたいページに自動的にリダイレクトされていきます。セッション管理も自動的にされているようです。

これで認証が簡単にできます。ちょっと改良すればBasic認証なんかにも応用できるみたいですがしりません。

○RSS配信と単体表示

そして、もうちょっと細かい改良ということで記事一件ごとの表示に対応させてみました。

これまでどおり
C:\wamp\www\cakephp\app\views\memos
にファイルを追加し、コントローラにそれに応じたメソッドを追加するだけです。

名前はshow.thtmlにしておきました。内容はこんな感じ。


<?php
echo "<a href=\"".$memo["Memo"]["url"]."\" target=\"_blank\">".
$memo["Memo"]["title"]."</a> ".$memo["Memo"]["created"]."<br>".
$memo["Memo"]["memo"]."<br><br>".
$html->link("戻る","/memos", null, null);

そして、またまたまたコントローラ
C:\wamp\www\cakephp\app\controllers\memos_controller.phpに

show()を追加します。中身はこんなかんじ。editをちょっと変えただけです。


function show($id) {
$memo = $this->Memo->findById($id);
if (!$memo) {
$this->redirect("/memos");
return;
}
if (!empty($this->data)) {
$memo["Memo"]["title"] = $this->data["Memo"]["title"];
$memo["Memo"]["url"] = $this->data["Memo"]["url"];
$memo["Memo"]["memo"] = $this->data["Memo"]["memo"];
}
$this->set("memo", $memo);
}

次にRSSフィードを吐くようにします。あると何かと便利ですね。これまた意外と簡単です。

まず、

C:\wamp\www\cakephp\app\config\routes.php

Router::parseExtensions('rss');

を追加します。

そして、memoコントローラのvar $componentsにRequestHandleを追加します。

var $components = array("RequestHandler","Auth");

次にRSSフィードのテンプレを作成します。

C:\wamp\www\cakephp\cake\libs\view\layouts\rss\default.ctp

C:\wamp\www\cakephp\app\views\layouts\rss\memolayout.ctp
にコピペすればいいでしょう。

レイアウトを変更していないなら
C:\wamp\www\cakephp\app\views\layouts\rss\default.ctp

でいいんだと思います。

そして、フィードの中身を作成。
C:\wamp\www\cakephp\app\views\memos\rss\index.ctp
を作成します。中身はこんなの。


$this->set("channel", array (
"title" => "bogus memo RSS",
"link" => "http://localhost/c/memo",
"description" => "bogus memo RSS"));

echo $rss->items($memos, "rss_transform");

function rss_transform($memo) {
return array(
"title" => $memo["Memo"]["title"],
"link" => "/memos/show/{$memo["Memo"]["id"]}",
"description" => strip_tags($memo["Memo"]["memo"]),
"pubDate" => $memo["Memo"]["created"],
"guid" => "/memos/show/{$memo["Memo"]["id"]}");
}

$this->set("items", $rss->items($memos, "rss_transform"));
?>

これで

http://localhost/cakephp/memos/index.rss
にアクセスするとrssフィードが吐かれる予定です。

これで一応掲示板の完成です。

http://bogus.jp/c/memo

に作成したものがありますのでこんなものができるんだなあという参考になれば。
なにぶんいい加減なので間違ってるところや不適切な部分もあるかも思いますが、そのときはご指摘いただければ。

<参考にしたサイト>
CakePHPブログチュートリアル
CakeForge: Snippet Library
【CakePHP】AuthComponentについてのまとめ | ねねとまつの小部屋
CakePHPでBasic認証対応ページを作る - blog.katsuma.tv
CakePHP のおいしい食べ方: いちばん簡単な認証システム
CakePHP1.2でRSSフィードを使う | エムティシステム
CakePHP1.2で複数アプリを動かす設定

Written by bogus on 10月 6th, 2008

Tagged with