カテゴリー ‘ プログラミング

LaravelのRouting


最近、FuelPHPからLaravelの方がシンプルで良くない?って事で使っています。

で両方のRoutingの自分の気になった箇所を動作確認したので覚書

特にRoutingの中での「?」の使い方についてです。

Laravel

まず、「routes.php」の内容を以下のように設定してみた

これでまず、

「http://test2.com/a」でアクセスすると「2」にルーティングされそうだが→「404 Not Found」

「http://test2.com/a/1」でアクセスすると「2」にルーティングされそうだが→「404 Not Found」

「http://test2.com/bb/a」でアクセスすると→「a 9999」

「http://test2.com/bb/a/1」でアクセスすると→「a 1」

となる。

ここで「routes.php」の内容を

と変更すると

「http://test2.com/a」でアクセスすると→「a 9999」

となる

「?」を使用する場合は注意が必要のようです。

FuelPHPのキャッシュライブラリ – config以外でストレージを設定する方法


configの設定以外でのキャッシュの使用方法

今までは、configの設定に従ってキャッシュを使用してきていましたが、

今回はconfigの設定とは異なる設定で、キャッシュを使用する方法です。

以下が、configの設定とは異なる内容での使用方法の例です。

コントローラー

  public function action_forge()
  {
    // ここで使用するストレージ名と設定内容を記述する、
    // ここで設定しなかった、項目についてはcacheのconfigファイルの内容で設定される。
    // 「$config = 'file';」のように、ストレージ名のみを文字列で渡して使用する事も可能
    $config = array(
        'driver' => 'file',
        'expiration' => null,
        'file' => array(
          'path' => APPPATH.'cache_forge'.DS,
        ),
    );
    // String
    $cache = Cache::forge('string', $config);
    $cache->set('cache test');
    $data['string'] = $cache->get();

    // Array
    $a = array(1, 2, array('key' => 'value'));
    $cache = Cache::forge('array', $config);
    $cache->set($a);
    $data['array'] = $cache->get();

    // Object
    $o = new Library_Test();
    $cache = Cache::forge('object', $config);
    $cache->set($o);
    $data['object'] = $cache->get();

    return Response::forge(View::forge('cache/forge', $data));
  }

(configの設定は、fileストレージの動作を確認した時と同様にしてあります)

14,20,26行目のように、Cacheクラスのforgeメソッドを使用してCacheクラスのインスタンスを生成すると、

第2引数で渡したconfigの設定内容でキャッシュストレージに接続に行きます。

動作後のデータを確認すると、ちゃんとキャシュの情報は「cache」ではなく「cache_forge」フォルダに生成されています。

第1引数はキャッシュのキーです。

なんとなく違和感を感じる設定だな…。

キャッシュクラスのインスタンスを生成する時に使用するキー値を設定しているので、すごく違和感があります。なぜ「get」「set」などのメソッドの引数に、キャッシュのキーを取るようになぜ設計されていないのかすごく不思議です。

ちなみにコメントにも記述していますが、第2引数のconfigは配列でなく、ストレージ名を文字列で渡しても大丈夫です。

その場合、設定されていないconfigの情報はcacheのconfigから取得するようになります。

次回は、Redisのストレージを使用している時に気がついた、cacheのsectionについてまとめてみたいと思います。

FuelPHPのキャッシュライブラリ – redis編


今回は、redisストレージ

Redis

まず、cacheのコンフィグファイルをapp配下にコピーします。

cp fuel/core/config/cache.php fuel/app/config/

以下のように「fuel/app/config/cache.php」の内容を設定します。

return array(
  'driver' => 'redis',
  'expiration' => null,
  'cache_id' => 'fuel',
  'redis'  => array(
    'database' => 'default'
  ),
);

4行目の「cache_id」は初期のconfigに入っていませんが、redisストレージのソースの中で、key値を保存しているキーの名前に使用されています。(設定していない場合は「fuel」と言う値が使用されます)

これで「redis」ストレージをキャッシュに使用する設定ができました。

とりあえず、キャッシュを生成して試してみます。

コードの内容は、

コントローラー

public function action_redis()
{
    // String
    Cache::set('string', 'cache test');
    $data['string'] = Cache::get('string');

    // Array
    $a = array(1, 2, array('key' => 'value'));
    Cache::set('array', $a);
    $data['array'] = Cache::get('array');

    // Object
    $o = new Library_Test();
    Cache::set('object', $o);
    $data['object'] = Cache::get('object');

    return Response::forge(View::forge('cache/redis', $data));
}

View

<html>
<body>
<p>Cache - Redis</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</p>
</body>
</html>

こんな感じです。

この時に使用したLibrary_Testオブジェクトのソースは、

<?php
class Library_Test {
  public static function _init()
  {
  }

  public function __toString()
  {
    return 'Library_Test';
  }

}

こんな感じです。

(Library_Testの設置場所は「fuel/app/classes/library/test.php」です)

でアクセスしてみると、

恒例のエラーがでました。redisをインストールしてませんでした。

ということでインストール(epelリポジトリなので、もしかすると環境によってはyumのリポジトリが見つからない可能性があります。その場合は、こちらを参考にリポジトリを追加するか、自力でphpのmemcached extensionをインストールしてください)

sudo yum install redis
sudo /etc/init.d/redis start

で、再度アクセス

こんな感じになります。

登録されているキャッシュのデータを確認すると

こんな感じでした。

キーの管理が少し他のストレージと違いましたがデータの保存は同じ形で登録されていました。

次回は、configの設定以外でのcacheの使用方法をやってみたいと思います。

FuelPHPのキャッシュライブラリ – memcached編


今回はmemcachedストレージ

Memcached

まず、cacheのコンフィグファイルをapp配下にコピーします。

cp fuel/core/config/cache.php fuel/app/config/

以下のように「fuel/app/config/cache.php」の内容を設定します。

return array(
  'driver' => 'memcached',
  'expiration' => null,
  'memcached'  => array(
    'cache_id'  => 'fuel',
    'servers'   => array(
      array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100)
    ),
  ),
);

これで「memcached」ストレージをキャッシュに使用する設定ができました。

とりあえず、キャッシュを生成して試してみます。

コードの内容は、

コントローラー

public function action_memcache()
{
    // String
    Cache::set('string', 'cache test');
    $data['string'] = Cache::get('string');

    // Array
    $a = array(1, 2, array('key' => 'value'));
    Cache::set('array', $a);
    $data['array'] = Cache::get('array');

    // Object
    $o = new Library_Test();
    Cache::set('object', $o);
    $data['object'] = Cache::get('object');

    return Response::forge(View::forge('cache/memcache', $data));
}

View

<html>
<body>
<p>Cache - Memcached</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</p>
</body>
</html>

こんな感じです。

この時に使用したLibrary_Testオブジェクトのソースは、

<?php
class Library_Test {
  public static function _init()
  {
  }

  public function __toString()
  {
    return 'Library_Test';
  }

}

こんな感じです。

(Library_Testの設置場所は「fuel/app/classes/library/test.php」です)

でアクセスしてみると、

エラーがでた。memcachedをインストールしてませんでした。

ということでインストール(epelリポジトリなので、もしかすると環境によってはyumのリポジトリが見つからない可能性があります。その場合は、こちらを参考にリポジトリを追加するか、自力でphpのmemcached extensionをインストールしてください)

sudo yum install php-pecl-memcached
sudo /etc/init.d/httpd restart

で、再度アクセス

こんな感じになります。

登録されているキャッシュのデータを確認すると

こんな感じでした。

APCの時と全く同じ形で登録されていました。

問題点

ソースを呼んでみるとphpのmemcachedライブラリの「setOption」を使用が出来るように設計されていません。

となるとデフォルトのままでは「Consistent Hashing」の設定をできないのでは?と思っています。

これができないと「サーバの追加時にキャッシュミスだらけ」になってしまいます。

やっぱり拡張しないとダメなのかな…。

次回は、redisを調べてみます。

FuelPHPのキャッシュライブラリ – APC編


今回はAPCストレージ

APC

まず、cacheのコンフィグファイルをapp配下にコピーします。

cp fuel/core/config/cache.php fuel/app/config/

以下のように「fuel/app/config/cache.php」の内容を設定します。

return array(
    'driver' => 'apc',
    'expiration' => null,
    'apc' => array(
        'cache_id'  => 'fuel',
    ),
);

これで、「apc」ストレージをキャッシュに使用をする設定ができました。

とりあえず、キャッシュを生成して試してみます。

コードの内容は、

コントローラー

	public function action_apc()
	{
		// String
		Cache::set('string', 'cache test');
		$data['string'] = Cache::get('string');

		// Array
		$a = array(1, 2, array('key' => 'value'));
		Cache::set('array', $a);
		$data['array'] = Cache::get('array');

		// Object
		$o = new Library_Test();
		Cache::set('object', $o);
		$data['object'] = Cache::get('object');

		return Response::forge(View::forge('cache/apc', $data));
	}

View

<html>
<body>
<p>Cache - APC</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</p>
</body>
</html>

こんな感じです。

この時に使用したLibrary_Testオブジェクトのソースは

<?php
class Library_Test {
  public static function _init()
  {
  }

  public function __toString()
  {
    return 'Library_Test';
  }

}

こんな感じ

(Library_Testの設置場所は「fuel/app/classes/library/test.php」です)

でアクセスしてみると、

エラーが出た。APCをインストールしていませんでした。

ということでインストール

sudo yum install php-pecl-apc
sudo /etc/init.d/httpd restart

で、再度アクセス

こんな感じになります。

登録されているキャッシュのデータを確認すると

こんな感じで登録されていました。

登録内容的にはFileの時と変わらない感じでした。

次回は、memcachedを調べてみます。

return top