nabeo56BLOG

開発とかプログラムとか

WEBアプリ養成読本の実践(2)のつづき

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

2-3のつづき

illuminate/Eloquentによるデータベース操作

データベース接続の設定

接続用クラスの作成
$ pwd
/vagrant/work/app/lib
$ mkdir Base
$ vim Base/DB.php
<?php
namespace Base;
class DB
{
  // illuminateのデータベース接続設定とブートアップ
  static function registerIlluminate(array $setting)
  {
    $capsule = new \Illuminate\Database\Capsule\Manager;
    $capsule->addConnection($setting);
    $capsule->setEventDispatcher(
      new \Illuminate\Events\Dispatcher(
        new \Illuminate\Container\Container()
      )
    );
    $capsule->setAsGlobal();
    $capsule->bootEloquent();
  }
}
接続設定作成
$ pwd
/vagrant/work/app
$ vim config.php
<?php
define('TEMPLATES_DIR_PATH', __DIR__ . '/templates');

$db_settings = [
  'driver' => 'mysql',
  'host' => 'localhost',
  'database' => 'tinitter',
  'username' => 'root',
  'password' => 'password',
  'charset'  => 'utf8',
  'collation' => 'utf8_unicode_ci',
];
DB接続のセットアップ
$ vim htdoc/index.php
<?php
// ライブラリ読み込み
require '../vendor/autoload.php';
// 設定ファイルの読み込み
require '../config.php';

// Slimの初期化
$app = new \Slim\Slim([
  'templates.path' => TEMPLATES_DIR_PATH,
  'view' => new \Slim\Views\Twig()
]);
// Slimにルートを登録
\Tinitter\Route::registration($app);

// データベース接続のセットアップ
\Base\DB::registerIlluminate($db_settings);

// 実行
$app->run();
テーブル作成(databaseはtinitterで作成済み)
$ mkdir data
$ vim data/schema.sql
DROP TABLE IF EXISTS posts;
CREATE TABLE posts (
  id integer primary key not null auto_increment,
  nickname text not null,
  body text not null,
  created_at datetime not null,
  updated_at datetime not null
);
$ mysql -uroot -p --database=tinitter <data/schema.sql
モデルクラス作成
$ mkdir lib/Tinitter/Model
$ vim lib/Tinitter/Model/Post.php
<?php
namespace Tinitter\Model;
class Post extends \Illuminate\Database\Eloquent\Model
{
}
データ登録処理実装
$ vim lib/Tinitter/Controller/TimeLine.php
<?php
namespace Tinitter\Controller;
class TimeLine
{
  public function show()
  {
    $app = \Slim\Slim::getInstance();

    // データ作成
    $post = new \Tinitter\Model\Post;
    $post->nickname = 'ニックネーム';
    $post->body = '本文';
    $post->save();
    $same_post = \Tinitter\Model\Post::find($post->id);

    $app->render(
      'index.twig',
      [
        'display_text' => "Hello, world!!",
        'id' => $same_post->id,
        'nickname' => $same_post->nickname,
        'created_at' => $same_post->created_at,
      ]
    );
  }
}

テンプレートに登録内容を表示

$ vim templates/index.twig
{% extends "frame.twig" %}
{% block content %}
  {% autoescape true %}
  hello Twig!<br />
  {{display_text}}<br />
  id:{{id}}<br />
  nickname:{{nickname}}<br />
  created_at:{{created_at}}<br />
  {% endautoescape %}
{% endblock %}

ブラウザで表示

http://localhost/ hello Twig! Hello, world!! id:12 nickname:?????? created_at:2014-12-11 02:06:45

以上。