CakePHP3でブログチュートリアル

powered by hm solution

お問い合わせ:0120-290-727
受付時間:10:00~18:00(土日祝は除く)

お問い合わせ
ブログTOP » web » プログラミング » CakePHP3でブログチュートリアル

CakePHP3でブログチュートリアル

しげじゅん
php5.4以降の機能も勉強しないと・・・

前回でCakePHP3の動作環境を作成したので、動作確認もかねてCakeを触っている人なら1度は見たことあるであろう公式のブログチュートリアルを、CakePHP3向けに変更しつつ作成していきます。

ブログデータベースの作成

ここはチュートリアルと同様のテーブルを作成します。以下のSQLでpostsテーブルを作成し、テストデータも作成します。

CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());

Cakeのデータベース設定

CakePHP3からは、データベース設定はApp/Config/app.phpに統合されました。このコードからDatasourcesの行を探し、自分の環境に合わせた設定にします。

'Datasources' => [
    'default' => [
        'className' => 'Cake\\Database\\Driver\\Mysql',
        'persistent' => false,
        'host' => 'localhost', //Mysqlサーバホスト名またはIPアドレス
        'login' => 'root',     //Mysqlユーザ名
        'password' => '',
        'database' => 'blog',  //スキーマ
        'prefix' => false,
        'encoding' => 'utf8',
    ],

この後Security.saltなどの変更が指示されていますが、composerでCakePHP環境を作成していればこの値はすでにランダム値で設定されています。便利な世の中になりました。

モデルの作成

CakePHP3からここが大きく変わりました。Modelはテーブルの定義と関連を記述するTableと、DBのレコードとなるEntityの2つに分割されました。CakePHP3では、DBからレコードを取得すると今までの配列に変わり、Entityで定義したクラスのオブジェクトになります。

Tableの作成

App/Model/Table/PostsTable.phpを新規作成します。

<?php

namespace App\Model\Table;
use Cake\ORM\Table;

class PostsTable extends Table {
  
}
?>

DBのテーブル名がpostsであれば、特に記述は必要ありません。ここでは、実際のテーブル名へのマッピングや、hasManyなどの他テーブルへの関連を記載します。

Entityの作成

App/Model/Entity/post.php を作成します。クラス名は複数形から単数形に変わります。

<?php

namespace App\Model\Entity;
use Cake\ORM\Entity;

class Post extends Entity {

}

?>

このクラスには、取得したデータの変換やバリデーションを記述します。今回は何もしないので空にしておきます。

Postsコントローラの作成

コントローラ自体はあまり変わっていません。App/Controller/PostsController.phpを新規作成します。まず、index()のみを作成します。

<?php

namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;

class PostsController extends AppController {

    public function index(){
        $poststable = TableRegistry::get('Posts');
        $this->set('posts', $poststable->find('all'));
    }
    
}
?>

モデルの使用方法は変更されました。TableRegistry::get() で先ほど作成したTableクラスのオブジェクトを取得し、そのオブジェクトでTableを操作します。
今回は、テーブルに登録されているデータ全てを取得するコードのみを記載します。

Postビューの作成

indexアクション用のビューを作成します。CakePHP3ではビューの保存先が変更され、App/Templete になりました。App/TempleteにPostsディレクトリを作成し、
App/Templete/Posts/index.ctpを新規作成します。

<h1>Blog posts</h1>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>

<?php foreach ($posts as $post): ?>
    <tr>
    <td><?php echo $post->id; ?></td>
    <td>
    <?php echo $this->Html->link($post->title, array('controller' => 'posts', 'action' => "view", $post->id));?>
    </td>
    <td><?php echo $post->created->format('Y-m-d H:i:s'); ?></td>
    </tr>
<?php endforeach; ?>
<?php unset($post); ?>
</table>

Modelの扱いが変わっています。ここでは以下の2つが関連します。

・DBのレコードがオブジェクトとなった
配列からオブジェクトになり、DBのカラム名でプロパティが作成されます。$post['Post']['id']で取得していた方式から$post->id に変わりました。
簡単になりました。

・データ型がStringからDBカラムに応じたデータ型になった
今まではModelで取得した結果はすべてStringでしたが、カラムに応じたデータ型になっています。$post->createdはDATETIME型でDBを作成しているのでプロパティもDatetTimeのオブジェクトとなっています。これで日付関連の処理も簡単になりそうな気がします。

実行

ひとまずDB内容を表示するページが作成できましたので、ここで動作確認しておきましょう。/posts をブラウザで開き、以下の画面が表示されればOKです。
リンク先のページを作成していないのでエラーとなりますが、今は気にしないことにします。

cakephp3blog

まとめ

DBからのデータ取得と表示部分のみを作成しました。興味がある方は別ページの作成と新規投稿処理なんかを作成していくと面白いかもしれません。

人気記事

カテゴリ一覧

ホームページを新規制作・リニューアルしたい方 ホームページ診断 神戸ホームページ制作センター採用情報
弊社が手がけた制作実績 スタッフブログ ECの運営ならコンサルロケッツにお任せください!!ギュイーン!!
充実の運用サポート 失敗する業者選びの典型例

制作サイトSEO対策実績

今月のSEO対策結果
キーワード順位
出張マッサージ 京都
1位
手元供養 通販
1位
ユニバーサルマナー
1位
外壁塗装 神戸
2位
整体 大阪
1位
姫路 工務店
2位
ブライダルまつげ 神戸
2位
神戸 温泉
1位
葬儀 神戸
1位
温泉 神戸
2位
葬儀 大阪
4位
出張マッサージ 名古屋
3位
学生 プロモーション
1位
オークション 代行
3位
コンテナ 販売
3位
目 資格
1位
学生 広告
1位
大阪 ホテル
1位
ヘアサロン 南船場
3位
リフォーム
1位
ブランドメガネ 買取
3位
防犯カメラ 神戸
1位
大阪 ホテル
1位
兵庫 探偵
2位
出張マッサージ 神戸
1位
カルジェルネイル 神戸
2位
フィラリア予防
3位
神戸 ネットカフェ
1位
薬剤師 求人
1位
合宿免許 ローン
1位
美容院 南船場
3位
神戸 婚活
1位

2013年09月調査結果の一部

ホームページ制作対応エリア

制作エリア
【営業地域】
大阪府/奈良県/滋賀県/京都/和歌山/三重/兵庫県/神戸市/神戸市北区/神戸市西区/三田市/宝塚市/川西市/篠山市/三木市/小野市 /尼崎市/芦屋市/明石市/伊丹市/西宮市/姫路市/西脇市/豊岡市/加古川市/加西市/加東市/相生市/赤穂市/朝来市/淡路市/市川町/宍粟市/竜野市/丹波

【受注可能地域】
大阪府/兵庫県/京都府/滋賀県/奈良県/
和歌山県/三重県/岡山県/徳島県など
全国各地
Googleビジネスパートナー
powered by hm solution
お問い合わせ
お問い合わせ
gmt
© hm solution, Ltd.