1

CakePHP(2.1)アプリでは、cacheActionと一緒にテーマを使用しています。たとえばのビューにアクセスすると/controller/action、そのキャッシュファイルはに保存されtmp/views/controller_action.phpます。モバイルURL(などm.example.com)から同じビューにアクセスする場合、モバイルデバイスの出力を簡素化するために、テーマのあるビューで同じアプリを内部的に使用します。

しかし、キャッシュに問題があります。両方のリクエストのホスト名とテーマは異なりますが、コントローラー/アクションは同じであるため、キャッシュファイルのファイル名は同じです。したがって、異なるホストまたはテーマでURLにアクセスすると、CakePHPは同じキャッシュファイル(より正確には最初のリクエストのキャッシュファイル)を返します。パラメータ(ホスト名やテーマなど)によっては、キャッシュファイルの名前を変更することはできません。

CacheHelperのパラメーターを変更しようとしましたが、成功しませんでした。CacheHelperのキャッシュパス/プレフィックスをその場で変更する方法はありますか?または、この動作を実現する別の可能性はありますか?

4

2 に答える 2

1

より良い解決策:CakePHP 2.3は、コア構成でキャッシュプレフィックスをサポートするようになりました。

Configure::write('Cache.viewPrefix', 'YOURPREFIX');

このプレフィックスは、これらのリクエストで異なるテーマ名またはその他のパラメータに一致するように調整できます。

于 2013-01-25T08:43:55.743 に答える
1

この問題を解決する唯一の回避策は、次の手順です。

1)CacheHelperを拡張する独自のMyCacheHelperを作成し、に保存しapp/View/Helper/CacheHelper.phpます。メソッドを上書きし_writeFile()、$path文字列の行をプレフィックスで拡張します。

App::uses('Helper', 'Cache');
class MyCacheHelper extends CacheHelper
{
  public function _writeFile($content, $timestamp, $useCallbacks = false)
  {
    // ...
    $cache = $prefix.strtolower(Inflector::slug($path));
    // ...
  }
}

2)Dispatcherを拡張する独自のMyDispatcherを作成し、に保存しapp/Lib/Routing/MyDispatcher.phpます。メソッドを上書きしcached()、$path文字列の行をプレフィックスで拡張します。

App::uses('Dispatcher', 'Routing');
class MyDispatcher extends Dispatcher
{
  public function cached($path)
  {
    // ...
    $path = $prefix.strtolower(Inflector::slug($path));
    // ...
  }
}

3)app/webroot/index.php新しいディスパッチャを使用するようにファイルを変更します。

App::uses('MyDispatcher', 'Routing');
$Dispatcher = new MyDispatcher();

$helper4)コントローラーのパラメーターを更新して、のMyCache代わりに使用しますCache

それでおしまい。少し複雑ですが、期待どおりに機能します。これで、$ prefixを必要に応じて調整し、さまざまなドメインなどに固有のキャッシュファイルを作成できます。

于 2012-05-05T13:26:47.660 に答える