예제 #1
0
 /**
  * HTTPリクエストのURLのプレフィックスに合致するインスタンスを返す
  *
  * @param CakeRequest $request URLをチェックするリクエスト
  * @param string $expect 期待値
  * @return void
  * @dataProvider findByUrlDataProvider
  */
 public function testFindByUrl($alias, $expect)
 {
     $request = new CakeRequest($alias);
     $result = $this->agent->findByUrl($request);
     if (!is_null($result)) {
         $this->assertEquals($expect, $result->name, '設定を正しく読み込めません');
     } else {
         $this->assertNull($result, '存在しないエイリアス名で設定が読み込まれています');
     }
 }
예제 #2
0
 /**
  * beforeDispatch Event
  *
  * @param CakeEvent $event イベント
  * @return void|CakeResponse
  */
 public function beforeDispatch(CakeEvent $event)
 {
     $request = $event->data['request'];
     $response = $event->data['response'];
     $this->addDetectors($request);
     //アセットならスキップ
     if ($this->isAsset($request)) {
         Configure::write('BcRequest.asset', true);
         return;
     }
     //$_SERVER['HTTP_USER_AGENT']からエージェントを取得
     $agent = BcAgent::findCurrent();
     if (!is_null($agent) && $agent->isEnabled()) {
         if (!$request->is('admin') && $agent->shouldRedirects($request)) {
             $response->header('Location', $request->base . '/' . $agent->makeRedirectUrl($request));
             $response->statusCode(302);
             return $response;
         }
     }
     //URLからエージェントを取得
     $agentByUrl = BcAgent::findByUrl($request);
     if (!is_null($agentByUrl) && $agentByUrl->isEnabled()) {
         Configure::write('BcRequest.agent', $agentByUrl->name);
         Configure::write('BcRequest.agentPrefix', $agentByUrl->prefix);
         Configure::write('BcRequest.agentAlias', $agentByUrl->alias);
         /*
          * =========================================================
          * /m/files/... へのアクセスの場合、/files/... へ自動リダイレクト
          * CMSで作成するページ内のリンクは、モバイルでアクセスすると、
          * 自動的に、/m/ 付のリンクに書き換えられてしまう為、
          * files内のファイルへのリンクがリンク切れになってしまうので暫定対策。
          *
          * 2014/12/30 nakae bootstrap.phpから移行
          * =========================================================
          */
         $param = preg_replace('/^' . $agentByUrl->alias . '\\//', '', $request->url);
         if (preg_match('/^files/', $param)) {
             $response->statusCode(301);
             $response->header('Location', "{$request->base}/{$param}");
             return $response;
         }
     }
     //bootstrapから移動する
     //Configure::write('BcRequest.isUpdater', $this->isUpdate($request));
     //Configure::write('BcRequest.isMaintenance', $this->isMaintenance($request));
 }