제목 | 컨트롤필터 우선순위 - 내용추가 | ||
---|---|---|---|
카테고리 | CI 4 관련 | ||
글쓴이 | nuno | 작성시각 | 2020/01/22 21:08:32 |
|
|||
app/config/Routes.php 에 필터를 적용하면 app/config/Filters.php 의 글로벌에 적용한 필터보다 우선 적용이됩니다. 글로벌에 적용한 필터가 우선 적용될수 있게 할 수 있는 방법이 있을까요? app/config/Filters.php 의 $filters 에 적용하면 글로벌 필터가 우선 적용되긴하지만 루트디렉토리에는 유저기능을 구현하고 admin 폴더에 관리자 기능을 나눌려고하니 어렵네요. ------------------------------------------------------------------------------------------------------------------------------ 설명을 길게하면 복잡해질꺼 같아서 단순하게 글을 섰더니 전달이 잘못된거 같습니다.
app/Filters/PublicFilter.php echo 'Public'; app/Filters/UserFilter.php echo 'user'; app/Filters/AdminFilter.php echo 'admin'; app/config/Filters.php public $globals = [ 'before' => [ 'public', ], 'after' => [ 'toolbar', ], ]; app/config/Routes.php $routes->get('/', 'App\Controllers\main::index', ['filter' => 'user']); /* 결과 user public */ App/Controllers -> 사용자페이지 App/Contollers/Admin -> 관리자페이지 위과 같은 구조로 구현을할려고 하며 PublicFilter에 공통기능을 작성 UserFilter, AdminFilter 에 각각 구분되는 되는 필터를 작성을 하고자하나 위의 결과와 같이 UserFilter 필터가 먼저 실행이됩니다. 위의 문제를 해결을 하기위해서 app/config/Routes.php $routes->get('/', 'App\Controllers\main::index); app/config/Filters.php public $filters = [ 'admin' => ['before'=>['admin', 'admin/*']], 'user' => ['before'=>['user', '*']], ]; 이렇게 작성을하면 public user 이렇게 원하는 결과를 얻을수 있으나 admin 디렉토리에서는 public admin user 이렇게 나오는 문제가 생깁니다. 이부분을 해결을 하기위해서 app/config/Filters.php public $filters = [ 'admin' => ['before'=>['admin', 'admin/*']], 'user' => ['before'=>['user', 'user/*']], ]; app/config/Routes.php $routes->get('/', function() { return redirect()->to('/user'); }); $routes->get('/User', 'App\Controllers\main::index'); $routes->get('/Admin', 'App\Controllers\Admin\main::index'); 이렇게 하면 위의 문제는 해결이됩니다 하지만. http://주소/user/ 는 open graph 를 가져올수 있고 http://주소/ 는 open graph 를 불러오지못하고는 문제가 발생을합니다. 위의 문제를 해결할려고하는데 어떻게 해야할까요? 질문 2: 제가 할려는 구조가 잘못되었을까요? 저걸 구현하기위한 다른 방법이 있을까요? 제가 초보라서 어려움이 있네요 이해부탁드립니다.
|
|||
다음글 | log_message 함수에 대한 질문입니다. (1) | ||
이전글 | 컨트롤러에서 ajax post 요청 받는법 (5) | ||
변종원(웅파)
/
2020/01/23 10:53:44 /
추천
0
|
nuno
/
2020/01/23 14:37:24 /
추천
0
@변종원(웅파) 답변감사합니다. 내용추가했습니다. |
nuno
/
2020/01/23 15:40:34 /
추천
0
해결했습니다. public $globals = [ 'before' => [ 'public', ], 'after' => [ 'toolbar', ], ]; public $filters = [ 'admin' => ['before'=>['admin', 'admin/*']], 'user' => ['before'=>['user', 'user/*', '/']], ]; $routes->get('/', 'App\Controllers\main::index'); $routes->get('/user/main', 'App\Controllers\main::index');
|
질문이 조금 이상합니다.
app/config/Routes.php 에 필터를 적용하면 app/config/Filters.php 의 글로벌에 적용한 필터보다 우선 적용이됩니다.
app/config/Filters.php 의 $filters 에 적용하면 글로벌 필터가 우선 적용되긴하지만 <- 된다고 이야기하시는 건데요? ^^
프레임워크 특성상 Routes를 먼저 탈 겁니다. 주소에 대해 분배 처리가 되고 그 이후에 필터(csrf 등)처리가 됩니다.
routes와 filter의 역할은 다른 것인데 혼동하시는 것 같습니다 주소처리에 대한 부분이라면 Routes에서 처리하셔야 합니다.