하나의 cakephp server 에 복수의 서비스를 제공하며 각 서비스에 별도의 로그인이 필요한 경우..
예를 들면 관리자 페이지와 유저 페이지가 별도로 있고 각각 관리자 로그인, 유저 로그인을 제공해야 하는 경우에 별도로 cakephp를 설치하여 제공하게 되면 용량도 낭비되고 관리도 어려움.
이틀 끙끙거리다가 나름 답을 찾았으나 50점 짜리..결국 도움을 받아서 해결하게 되었음.
1. 우선 폴더구조를 변경해야 한다. 만약에 관리자와 이용자 페이지를 별도로 분리하여 서비스를 하는 경우라면,
/src/controller 와 src/template 폴더에 각각 admins 과 users 혹은 private 와 public 등등 물리적으로 분리할 수 있는 폴더를 만든다. 이 폴더 이름이 prefix 이름으로 사용됨. 아, 이미 데이터베이스와 테이블 설정이 끝난 상태에서 2번의 bake 를 돌리면 자동으로 폴더구조가 만들어짐...
애
2.애초에 bake 명령을 사용할 때 prefix 를 설정하는 것을 추천. 수동으로 하는 경우 페이지가 안 뜨거나 컨트롤러를 못 찾는 등의 문제가 발생하더라...
> bake command
|
cake bake all [project_name] --prefix [name]
|
만약에 수동으로 할 경우에는 기존의 컨트롤러 파일 위에 정의되어 있는 namespace App\Controller; 를 namespace App\Controller\[prefix_name]; 으로 변경한다.
3. /config 폴더에 있는 routes.php 파일에 prefix 를 포함해서 루팅설정을 한다.
> /config/routes.php
|
<?php
/**
* Routes configuration
*
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;
Router::defaultRouteClass(DashedRoute::class);
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
/**
* 一般用トップページ用(이용자용 페이지)
*/
// $routes->connect('/:controller', ['action' => 'index', 'prefix' => 'user'], ['routeClass' => 'DashedRoute']);
// $routes->connect('/:controller/:action/*', ['prefix' => 'user'], ['routeClass' => 'DashedRoute']);
/**
* システム管理者トップページ用(관리자용 페이지)
*/
$routes->connect('/admin', ['controller' => 'Contract', 'action' => 'index', 'prefix' => 'admin']);
//주석처리 필수
//$routes->fallbacks(DashedRoute::class);
});
// 이 부분을 추가
Router::prefix('admin', function ($routes) {
$routes->fallbacks('DashedRoute');
});
Plugin::routes();
|
4. AppController 에 auth 설정을 해 준다.
> /src/Controller/AppController.php
|
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
if ($this->request->prefix == 'admin') {
$this->loadComponent('Auth', [
]);
$this->Auth->sessionKey = 'Admin';
} else {
$this->loadComponent('Auth', [
]);
}
}
}
|
아아..힘들었다...ㅠㅠ
댓글
댓글 쓰기