初めてのCakePHP3.0でBookmarkerチュートリアルをやってみる

CakePHP3.0チュートリアルその①

2015年03月30日(月)

まずはここからCakePHP3.0がリリースされたので一通りアプリケーションを組めるようになるために、まずはCakePHPのDocsに記述されている方法のチュートリアルで一通り動くようなアプリケーションを作成してみよう。

ということでわたくしも始めてながら構築していきます。

 

一応以下の環境ができている前提で進めます。

できていない方は参照して環境を整えてみてくださいね。

①Composerさんをインストール

http://pk-brothers.com/1697/

②CakePHP3.0をインストール

http://pk-brothers.com/1705/

 

一応まだ英語しかない?けどこちらのチュートリアルにそって進めていければと!

http://book.cakephp.org/3.0/en/tutorials-and-examples/bookmarks/intro.html

環境のセットアップはもうすんでいると思うのでテーブル構築箇所から行きます。

 

テーブルを作成する

Bookmarkerアプリケーションを構築するためのテーブルを作ります。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created DATETIME,
    updated DATETIME
);

CREATE TABLE bookmarks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(50),
    description TEXT,
    url TEXT,
    created DATETIME,
    updated DATETIME,
    FOREIGN KEY user_key (user_id) REFERENCES users(id)
);

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created DATETIME,
    updated DATETIME,
    UNIQUE KEY (title)
);

CREATE TABLE bookmarks_tags (
    bookmark_id INT NOT NULL,
    tag_id INT NOT NULL,
    PRIMARY KEY (bookmark_id, tag_id),
    INDEX tag_idx (tag_id, bookmark_id),
    FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
    FOREIGN KEY bookmark_key(bookmark_id) REFERENCES bookmarks(id)
);

このままドーン!

よし、問題なかった!!次いこう!!!

 

DBのConfigをセットアップする

config/app.php

'Datasources' => [
 'default' => [
 'className' => 'Cake\Database\Connection',
 'driver' => 'Cake\Database\Driver\Mysql',
 'persistent' => false,
 'host' => 'localhost',
 /**
 * CakePHP will use the default DB port based on the driver selected
 * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
 * the following line and set the port accordingly
 */
 //'port' => 'nonstandard_port_number',
 'username' => '',
 'password' => '',
 'database' => 'sandbox',
 'encoding' => 'utf8',
 'timezone' => 'UTC',
 'cacheMetadata' => true,

 /**
 * Set identifier quoting to true if you are using reserved words or
 * special characters in your table or column names. Enabling this
 * setting will result in queries built using the Query Builder having
 * identifiers quoted when creating SQL. It should be noted that this
 * decreases performance because each query needs to be traversed and
 * manipulated before being executed.
 */
 'quoteIdentifiers' => false,

 /**
 * During development, if using MySQL < 5.6, uncommenting the
 * following line could boost the speed at which schema metadata is
 * fetched from the database. It can also be set directly with the
 * mysql configuration directive 'innodb_stats_on_metadata = 0'
 * which is the recommended value in production environments
 */
 //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
 ],

こんな感じかな。

そうするとデフォルトのTOP画面の以下の表示が

CakePHP- the rapid development php framework (2)

こちらに変化するはず!!

CakePHP- the rapid development php framework (3)

 

 




なんかいつも通りのやつだね!!OKじゃあ次!!!

 

bakeで各テーブルのMVCを作ろう

Oh。。。もうbakeか。これやったらもうできちゃうじゃないか。。。

よし。もうやっちゃおう!!

bin/cake bake all users
bin/cake bake all bookmarks
bin/cake bake all tags

上記はbinディレクトリで「cake bake all 各テーブル名」を実行すればOKです。

実行するとビロビローっと処理がされます。

ざっと作成されたファイルを確認すると以下のような感じかなぁ

../src/Controller/BookmarksController.php
../src/Controller/TagsController.php
../src/Controller/UsersController.php
../src/Model/Entity/Bookmark.php
../src/Model/Entity/Tag.php
../src/Model/Entity/User.php
../src/Model/Table/BookmarksTable.php
../src/Model/Table/TagsTable.php
../src/Model/Table/UsersTable.php
../src/Template/Bookmarks/
../src/Template/Tags/
../src/Template/Users/

各テーブル毎にControllerとModel(EntityとTable)とTemplate(昔でいうViewか)が作成されていますね!

bakeで焼かれたファイルは参考になるコーディングなのでおいしく食べましょうね!!

 

ちなみにここではbake allを使用しましたが、個々にMVCをやる場合は以下のようにやるだけ。

bin/cake bake controller Users
bin/cake bake model Users
bin/cake bake view Users

ここら辺は以前と変わってないかな。

 

画面を確認する

せっかくなんの苦労もせずbakeで作ったのでどんなもんか確認してみよう!CakePHP- the rapid development php framework- Users

おぉー。レイアウトが変わっている。かっこよくなっている。

いいね!!しかもCRUD処理もやはりついていますね!!さすがbakeさんだ。

 

パスワードをハッシュ化して保存する

さぁ第一回チュートリアルも最後です。結構楽勝にいきますねぇ。インストールまでの方がつらかったわ・・・w

UsersテーブルにPasswordがあるということは・・・

そう、毎度必ずやるパスワードのハッシュ化です。

 

src/Model/Entity/User.php

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

/**
 * User Entity.
 */
class User extends Entity
{

 /**
 * Fields that can be mass assigned using newEntity() or patchEntity().
 *
 * @var array
 */
 protected $_accessible = [
 'email' => true,
 'password' => true,
 'bookmarks' => true,
 ];

 protected function _setPassword($value)
 {
   $hasher = new DefaultPasswordHasher();
   return $hasher->hash($value);
 }
}

追加箇所は太字のところです。

use Cake\Auth\DefaultPasswordHasher;

これやるんだ。

 

さぁUser登録をしてみます。ハッシュ化されているか。

ばっちりハッシュ化されていました!さすがだな!!ここまでなにもエラーなしだ!!!

さすがチュートリアル!

 

残りはrouthingとかやっているけど、とりあえずはここまでできれば最初はOKだと思うので、

深みにはまらないうちにbakeされたソースを確認してここまでの理解を深めたほうがいいと思います!

 

続きはまた今度やります!!

お休みなさいませご主人様。

 

スポンサードリンク

運営サービスPR

スポンサードリンク

運営サービスPR