PHP: 2009年2月アーカイブ

symfonyアドベントカレンダー4日目:リファクタリング

3日目までは挫折したなりにも以前やったことがあったのですんなりだったが、4日目にしてグっとボリュームが出てきた感じ。

新しく試したキーワードをざっと挙げるだけでも、

  • モデルにトリガーメソッドを作成
  • パーシャルでフラグメントの整理
  • トランザクション
  • URLルーティング調整
  • カスタムクラス作成

となかなかに盛り沢山。

内容も盛り沢山なので、その分だけわからない点もいくつか出てきた。

例えばInterest.phpのsaveメソッドを修正するところで、いきなり「$this->getQuestion()」が取れてしまうのは何で?schemaの定義に基づいて、modelが関連するQuestionオブジェクトも取得してくれてるってことなのかな。その辺りの自動で済ませてくれている部分が把握できてないと、重複してわざわざ取りに行くようなコードを書いてしまいそう。

ルーティングはかなり柔軟性が高そうで良さげですね。この恩恵を受けるために、テンプレート上のリンクはlink_toヘルパを使うようにすることが大事そう。

カスタムクラス作成でやったタイトルのストリップ処理は、日本語タイトル用にurlencodeするように変えたりしていましたが思うように動いてくれませんでした。これもちょっと課題。

ORMは便利だろうけど、パフォーマンスが気になるとかSQLが全部目に見える状態で作りたいとかいう話もあったりして、直接PDO経由でDB操作をしたい場合にどうすれば良いのか試してみました。

 

DSN情報を設定ファイルに記述。 

apps/appname/config/app.yml

all:
  db:
    dsn:  mysql:host=localhost;dbname=test
    user: root
    pass: pass

 

DB接続クラスを作成。 

lib/dbConnection.class.php

<?php
class dbConnection
{
  static private $PDOInstance;

  protected function __construct()
  {
    $dsn = sfConfig::get('app_db_dsn');
    $user = sfConfig::get('app_db_user');
    $pass = sfConfig::get('app_db_pass');

    self::$PDOInstance = new PDO($dsn, $user, $pass);
  }

 

  public static function getConnection()
  {
    if(!self::$PDOInstance)
    {
      new self();
    }

 

    return self::$PDOInstance;
  }

}

actionなどからコネクション取得。 

$conn = dbConnection::getConnection();

で、あとはこのコネクション使っていろいろと、ていう感じで動かしてみていたのですが、おいおい調べていたら自作せずともデフォルトのDB設定でPDO接続を指定できてしまうことを知りました・・・。 

 

config/databases.yml

all:
  pdocon:
    class:       sfPDODatabase
    param:
      dsn:       mysql:host=localhost;dbname=test
      dbtype:    mysql
      database:  test
      username:  root
      password: pass

actionからコネクション取得。 

$conn = $this->getContext()->getDatabaseConnection('pdocon');

action以外から取得。 

$conn = sfContext::getInstance()->getDatabaseConnection('pdocon');

 

なるほど、こっちの方が簡単。

動的にDB接続先を切り替えたりといったこともやってみたかったりするので、それぞれの使い勝手も含めて引き続き調べてみたいと思います。

まだ動かして間もないですが、少しずつsymfonyに慣れてきた気がします。

このアーカイブについて

このページには、2009年2月以降に書かれたブログ記事のうちPHPカテゴリに属しているものが含まれています。

前のアーカイブはPHP: 2008年8月です。

次のアーカイブはPHP: 2009年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

RSSフィード

  • 購読する

いろいろ

あわせて読みたい

フィードメーター - ポップフライ

seo

Powered by Movable Type 4.01