CakePHP2.xのルーティング仕様

# CakePHP 2.x における認証とルーティングの基本仕様

リプレイスで久しぶりにCakePHP2.xを触る機会がありましたので、個人用のメモも兼ねて書きました。
この記事では、CakePHP 2.x での認証コンポーネント（Auth コンポーネント）とルーティング設定の基本的な仕組みについて説明します。具体的には、ログイン前後の動作やリダイレクト先の設定、デフォルトのルーティングについて解説します。

---

## 1. 認証コンポーネントの設定例

以下は、認証とメッセージ表示に利用するコンポーネントの設定例です。  
この設定例では、ログイン成功時、ログアウト時のリダイレクト先、そしてパスワードの検証方式として Blowfish を指定しています。

```php
public $components = array(
    'Flash',
    'Auth' => array(
        'loginRedirect' => array(
            'controller' => 'example',  // ログイン成功後に遷移するコントローラ
            'action' => 'index'         // ログイン成功後に実行されるアクション
        ),
        'logoutRedirect' => array(
            'controller' => 'pages',    // ログアウト完了後に遷移するコントローラ
            'action' => 'display',      // ログアウト完了後に実行されるアクション
            'home'                    // 表示するビューなどのパラメータ（例：ホームページ）
        ),
        'authenticate' => array(
            'Form' => array(
                'passwordHasher' => 'Blowfish'  // パスワード検証に使用するハッシュアルゴリズム
            )
        )
    )
);
```

### Flash コンポーネント
- **役割**: ユーザーへの通知（成功メッセージ、エラーメッセージなど）の表示に使用されます。  
  例えば、ログイン失敗時にエラーメッセージを画面上に表示する場合などに利用されます。

### Auth コンポーネントの各設定
- **loginRedirect**
  - **内容**:  
    - コントローラ: `example`  
    - アクション: `index`
  - **動作**:  
    ログインに成功すると、ユーザーはこの設定に従って指定先にリダイレクトされます。  
    これにより、ログイン後の遷移先を統一的に管理できます。

- **logoutRedirect**
  - **内容**:  
    - コントローラ: `pages`  
    - アクション: `display`  
    - 追加パラメータ: `home`
  - **動作**:  
    ログアウト処理が完了すると、ユーザーはこの設定先にリダイレクトされます。  
    例として、ホームページ表示などに利用されることが一般的です。

- **authenticate**
  - **内容**:  
    - `Form` 認証方式で、`Blowfish` をパスワードハッシュ方式として採用
  - **動作**:  
    ユーザーがログインする際、送信されたパスワードは Blowfish アルゴリズムによるハッシュと照合され、認証の安全性が確保されます。

---

## 2. ルーティング仕様（認証以外の部分）

CakePHP では、認証以外のルーティングは `app/Config/routes.php` で設定されます。以下に、デフォルトルーティングとルート (`/`) の取り扱いについて説明します。

### デフォルトルーティングの基本
- **設定場所**:  
  `app/Config/routes.php`
- **仕様**:  
  デフォルトルーティングは、`/:controller/:action/*` という形式で定義されています。  
  つまり、URL の最初の部分がコントローラ名、2 番目の部分がアクション名に対応します。
- **動作**:  
  アクションが省略された場合は、自動的に `index` アクションが呼び出されます。  
  たとえば、`http://localhost:8080/sample/module` にアクセスすると、  
  - **コントローラ**: `ModuleController`  
  - **アクション**: 指定がなければデフォルトの `index` アクションが実行されます。

### ルート (`/`) へのアクセス設定
- **設定場所**:  
  `app/Config/routes.php` 内の `Router::connect('/', array(...));`
- **一般的な設定例**:
  ```php
  Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
  ```
- **動作**:  
  この設定により、ルート URL（`/`）にアクセスすると、  
  - **コントローラ**: `PagesController`  
  - **アクション**: `display`  
  - **パラメータ**: `home`（例として、ホームページの表示に利用）
  
  が呼び出され、サイトのトップページとして表示される仕組みとなっています。

---

## 3. 認証状態による動作の流れ

CakePHP の Auth コンポーネントは、認証状態に応じて自動的にリダイレクト処理を実施します。以下は、各認証状態における動作の概要です。

### ログイン前（未認証状態）
- **動作**:  
  ユーザーが認証を必要とするページにアクセスすると、Auth コンポーネントは認証済みかどうかをチェックします。  
  未認証の場合、デフォルトの **loginAction**（多くの場合 `/users/login` など、設定に応じた URL）に自動的にリダイレクトされます。
- **ポイント**:  
  - この設定は明示的に行うことも可能ですが、特に指定しない場合は CakePHP のデフォルト動作が適用されます。

### ログイン済の状態
- **動作**:  
  認証済みのユーザーは、通常のルーティング設定に従ってリクエストが処理されます。  
  URL によって自動的にコントローラとアクションが判断され、リクエストが実行されます。

### ログイン成功時のリダイレクト
- **動作**:  
  ユーザーがログインに成功すると、Auth コンポーネントは `loginRedirect` の設定に従い、  
  指定されたコントローラのアクションにリダイレクトします。  
  これにより、ログイン後の画面遷移を一元管理できます。

### ログアウト時のリダイレクト
- **動作**:  
  ログアウト処理が完了すると、Auth コンポーネントは `logoutRedirect` の設定に従い、  
  指定されたコントローラのアクションにリダイレクトします。  
  これにより、ログアウト後の表示内容（例として、ホームページの表示など）が適切に管理されます。

---

## 4. まとめ

- **Flash コンポーネント**  
  ユーザーへの通知表示に利用され、成功やエラーメッセージの表示を担います。

- **Auth コンポーネント**  
  以下の設定により認証処理を一元管理します：
  - **loginRedirect**: ログイン成功後、指定されたコントローラの `index` アクションにリダイレクト
  - **logoutRedirect**: ログアウト完了後、指定されたコントローラの `display` アクション（追加パラメータ付き）にリダイレクト
  - **authenticate**: パスワード検証は Blowfish ハッシュ方式を使用

- **ルーティング設定**  
  `app/Config/routes.php` によって、URL とコントローラ／アクションの対応が自動的に行われます。  
  - URL にアクションが省略された場合、デフォルトで `index` アクションが実行される仕様です。
  - ルート URL (`/`) は、専用の設定に従ってトップページが表示されます。

以上の仕組みにより、CakePHP 2.x のアプリケーションは認証関連の処理と、通常のルーティング処理が明確に分離され、かつ統一的に管理されます。  
この設計により、開発者は各種認証状態に応じた適切な画面遷移や、効率的な URL マッピングを実現できます。

---