2011 1月 ITかあさん

ITかあさん

cakephpでブックマークアプリを作る(1)

最小のMVCをつくる

Mはmodel(データベース),Vはview(HTMLや見た目の部分),Cはcontrollers(プログラムの制御を行う)でcakephpは構成されています。

modelを作成する

データベースにて、postsテーブルを作成しましたので、/app/models/フォルダの中に
post.phpというファイルを作成して、以下の記述をします。

php4ならこの記述

<?php
class Post extends AppModel
{
var $name = 'Post';//PHP4のときは書く
}
?>

php5以降ならこの記述

<?php
class Post extends AppModel
{
}
?>

class Post extends AppModel
class Post extends AppModelでは、postが単数形であることに注意してください。単数系であることだけ注意していただければ、特にこれと言って説明もありません。

controllersの作成

次にコントローラーを作成します。今回postというテーブルを使うことにしたので、/app/controllors/に新しくposts_controller.phpというファイルを作成して、以下の記述をします

<?php
  class PostsController extends AppController {
}
  ?>

posts_controller postsが複数系であることに注意してください。
モデル(データベース)は単数形、コントローラーは複数形といった感じでしょうか?

まだposts_controllerの中身は空ですが、ここでいったん、アクセスしてみたいと思います。
(途中からで申し訳ないのですが、ローカル環境にしてしまいました。)
ローカルのbookmarkフォルダで作って、postsコントローラーで作っているので、
URLは以下の通りになります。

http://localhost/bookmark/posts/

とりあえず怒られました。

cakephpには、コントローラーがあれば、必ずそれを出力するview(HTMLとかコントローラーの内容を出力するほう)が必要になります。

エラーが気になるのでとりあえず先にposts_controller.phpを出力するファイルを作成しておきます。
C:\xampp\htdocs\bookmark\app\views

コントローラー名がposts_controller.phpとしているので、viewフォルダに新しくpostsフォルダを作成して、その中にindex.ctpというファイルを作成します。viewの拡張子は.ctpとなっていることに注意してください。

C:\xampp\htdocs\bookmark\app\views\posts\view.ctp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bookmarkアプリ ブックマーク出力画面</title>
</head>

<body>
<h1>Bookmarkアプリ ブックマーク出力画面</h1>

<table>
<tr>
<th>サイト名</th>
<td>URL</td>
<td>登録日時</td>
<td>更新日時</td>
</tr>
</table>

</body>
</html>

うん、見るからに普通のHTMLファイルですね。WEBデザイナーの方なんかは、なんら気にする点はないと思います。

まずは一覧表示用のコントローラーを作成していきます。
{}の中にトップページ表示用の記述を追加します。

class PostsController extends AppController {
function index($id = null) {
$post = $this->Post->find('all');
debug($post);
}
}
}

これで一旦出力してみましょう。すると、

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => Yahoo
                    [url] => http://www.yahoo.co.jp
                    [created] => 2011-02-18 14:34:44
                    [modified] => 
                )

        )

    [1] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [title] => Google
                    [url] => http://www.google.co.jp/
                    [created] => 2011-02-18 14:35:11
                    [modified] => 
                )

        )

)

データベースの中身が連想配列で表示されました。debug()とは、cakePHPのコントローラー内で変数の中身を自由に参照するためのものです。文字列だろうが、配列だろうがどちらでもdebug()でいけます。便利ですね。

無事データベースの中身が参照できたところで、出力ファイル用に変数に代入してあげます。Smartyで言うところのsmarty assignのようなものです。function index($id = null){}の中に$this->set(‘post’,$post);と書いてあげるだけです

class PostsController extends AppController {
function index($id = null) {

$post = $this->Post->find('all');
debug($post);
$this->set('post',$post); }

}
}

長くなりましたが、あともう少し。先ほどのviewフォルダのindex.ctpを変更します

<table>
<tr>
<th>サイト名</th>
<td>URL</td>
<td>登録日時</td>
<td>更新日時</td>
</tr>
<tr>
<?php foreach ($posts as $post ): ?>
<th><?php echo $post['Post']['title'];?></th>
<td><?php echo $post['Post']['url'];?></td>
<td><?php echo $post['Post']['created'];?></td>
<td><?php echo $post['Post']['modified'];?></td>
</tr>
<?php endforeach; ?>
</table>

赤字の書き方でctpファイル内でのforeachになります。Smartyとそっくりです。

<table>
<tr>
<th>サイト名</th>
<td>URL</td>
<td>登録日時</td>
<td>更新日時</td>
</tr>
<tr>
<?php foreach ($posts as $post ): ?>
<th><?php echo $post['Post']['title'];?></th>
<td><?php echo $post['Post']['url'];?></td>;
<td><?php echo $post['Post']['created'];?></td>
<td><?php echo $post['Post']['modified'];?></td>
</tr>
<?php endforeach; ?>
</table>

<th><?php echo $post[‘Post’][‘title’];?></th>に注目してください。[‘Post’]と、model名が来ていますね!Postモデルのtitleというフィールドを出力しますよという意味になります。

長くなりましたが、以上で、一覧表示については終わります。

次回はORDER BYやWHEREのデータの条件の絞込みについてやります。

今回の内容は圧縮してこちらにおきました。
細かくコメントアウトでより詳しく解説してありますので、よろしかったらダウンロードしてください。
ダウンロードはこちら

今日のまとめ

・model→単数形
・controllers→複数形
・データベースのtable→複数形
・データを表示するにはcontrollerとそれに対応するviewが必要
・$post = $this->Post->find(‘all’);データは連想配列で受け取る

XPでUQ WiMAXを使ってみる

あけましておめでとうございます!新年第一発目の投稿はプログラムでもWEBデザインでもなんでもなくって、Wifi接続設定についてです

昨日加入をず~~~っとしようと思ってかれこれ半年以上経ってしまったんですが、ついにUQWimaxの契約したんです。魅力に感じたのはやっぱり安さ!やっぱりそこは主婦魂です。
月額3880円は安い。これで速度が問題なければ自宅の光回線フレッツマンションタイプ(月額4980円)を解約して完全にUQWimax一本にしようと思ってました。
有線はネットは早くて軽快ですがホコリがたまるし邪魔なんですよね~。

で、お店の人にも設定は簡単ですから、と言われていたんですがとにかく苦労しました。設定マニュアルの簡単セットアップを見ても解決できません。理由は設定を今回行ったのはWifiを勝手に検出できないタイプの古いXPだからです。
Vista以降のマシンは大抵勝手にWifiの電波を拾ってくれますがXPのマシンではwifiの電波を拾うアダプタが必要です。自宅のマシンがXPなら間違いなくアダプタを買う必要があります。値段は1000~3000円程度です。私はコジマ電気で750円のものを購入しました。

アダプタのドライバをインストールしたら、マシンにつなぎます。すると右下にパソコンに電波マークをつけたようなアイコンが出てきます。

そのアイコンをクリックすると 『ワイヤレスネットワークの接続状態』のポップアップが上がります。『ワイヤレスネットワークの表示』ボタンをクリックする。

するとアダプタが現在拾っているワイヤレスネットワークの一覧を出してくれます。

私の場合この『URoad-12***』というのが契約したUQWimaxの電波です。これを選択して 『接続』ボタンをクリックします。
それから購入した機械に書いてかるKEY:***を入力して完了です。


その後インターネットエクスプローラーなどクリックするとまだUQWimax設定がされていない旨表示がでます。後は付属の簡単設定マニュアルの通りです。

アイコンが表示されなかった場合、コントロールパネル→ネットワークとインターネット接続→ネットワーク接続→ワイヤレスネットワーク接続選択→(左メニュー)利用できるワイヤレスネットワークの表示 と選択してもワイヤレスネットワークの一覧が出ます。

私の場合、最初このワイヤレスネットワークの一覧が出ず悩みましたが、ドライバをもう一度インストールしてこの一覧を出すことに成功しました。ワイヤレスネットワークの一覧がどうしても出ない場合はアダプタのメーカーに連絡したほうがよさそうです。

これでやっと『UQwimaxの設定をする準備』ができるようになったわけです。

その後は付属の簡単セットアップマニュアルの通りでした!なのでこのあたりは割愛します。


この画面が出てきたら後はもう目前。指示通りに設定すれば完了です。

結局ここまでに4時間くらいかかりました。わかってしまうとなんてことないんですけどね。基本PCオンチなんで。(こんなんでよくWEBプログラマーやってるな~という突っ込みはなしでお願いします)

書くのが最後になりましたが、速度はとても快適で普通にネットをする分には問題ありません。が、購入した機械の(URoad-7000SS)はとても電池の消耗が激しいです。すぐ電池がなくなります。普通に持ち歩いていたら、電池一日持つかどうかは怪しいです。それと、充電アダプタがとても抜けやすく、充電しずらいです。
ファイルのアップロード・ダウンロードは光回線にはやや劣るくらいです。
後たまにプログラミングの講習をリモートアシスタンス使うんですが、さすがにWifiだとすごくかくかくします。リモートアシスタンスとか使うような人は有線の回線が圧倒的にいいです。そうではなくて自宅でネットをする程度ならUQwimaxはとても快適です。6~7年くらい前にAir-H” 使って外でネットしていたときとは比べ物になりません。ま、光回線にはおとるかな~。でもぜんぜんADSLよりは快適だな~って感じです。
リモートアシスタンスとか使う人は有線のほうがいいかもしれませんね。

近いうちにフレッツのマンションタイプは解約しようと思います。