1つのCakePHP3プロジェクトで管理画面も用意する方法
Webサイトなどを作成する場合、管理画面も用意される方も多いと思います。
その際、管理者と一般ユーザで2種類のセッションを用意しないといけなかったりと結構手間ですね。
今回はそんな手間なセッション周りをCakePHP3で実装する方法をご紹介します。
環境
実行環境はこんな感じです。
CentOS 7
PHP Version 7.1.11
Composer
※Composerのインストールおよび使い方の説明は割愛します
※Linuxの使い方の説明は割愛します
また、今回は下記のような設定を想定しています。
example.com にアクセスした場合 => 通常画面
example.com/management/ にアクセスした場合 => 管理画面
実装方法
今回は設定から変更していきます。
まずは config/routes.php を編集し、管理画面へのアクセスルーティングを変更します。
1 2 3 4 5 6 7 8 9 10 11 |
Router::scope('/', function (RouteBuilder $routes) { // 省略 // 管理画面のルーティング $routes->connect('/management/*', ['controller' => 'Managements', 'action' => 'login', 'prefix' => 'management']); // 省略 }); Router::prefix('management', function ($routes) { $routes->fallbacks('DashedRoute'); }); |
続いて AppController.php を改修していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
class AppController extends Controller { public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler', [ 'enableBeforeRedirect' => false, ]); $this->loadComponent('Flash'); if($this->getRequest()->getParam('prefix') == 'management') { // 管理者 $this->loadComponent('Auth', [ 'loginAction' => [ 'controller' => 'Managements', 'action' => 'login', ], 'loginRedirect' => [ 'controller' => 'Managements', 'action' => 'top', ], 'logoutRedirect' => [ 'controller' => 'Managements', 'action' => 'login', ], 'authError' => 'ログインに失敗しました', ]); $this->Auth->sessionKey = 'Auth.management'; } else { // 一般ユーザー $this->loadComponent('Auth', [ 'loginAction' => [ 'controller' => 'Users', 'action' => 'login', ], 'loginRedirect' => [ 'controller' => 'Users', 'action' => 'entryCondition', ], 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'login', ], 'authError' => 'ログインに失敗しました', ]); $this->Auth->sessionKey = 'Auth.user'; } // 省略 } } |
ここでは、prefixを使用して Auth の認証方法を変更しています。
あとは Users と Managements の両方で Auth コンポーネントを使用すれば
それぞれで認証をすることができます。
注意点としては、Controller や Templates などのディレクトリ構成が変更されてしまうことでしょうか。
(Management/ManagementsControllser.php などになってしまう)
まぁ場所が少し異なるだけで、そこまで不便はしないと思います。
さいごに
今回は単一ドメインでの管理画面の用意という、かなり特殊なケースかな?と思っています。
ですが、Web上で検索してもほとんど記事を見受けられなかったので、ご用意してみました。
このページをご覧になった方のお役に立てれば幸いです。
ではまた次回。
- おすすめ記事
-
-
のえる2019.04.05
-
POPULAR
のえる
Full-stack Developer