제목 | 컨트롤러 폴더 라우팅 문제 | ||
---|---|---|---|
카테고리 | CI 4 관련 | ||
글쓴이 | 스노우린 | 작성시각 | 2022/03/08 10:40:45 |
|
|||
현재 컨트롤러에 폴더를 만들어서 작업하려고 합니다. 메뉴얼을 따라서 3시간 정도 라우팅 설정을 시도 했는데 잘 안됩니다. 현재 디렉토리 구성은 이렇습니다.
-Controllers
-Ajax -Ajaxtesting.php //라우터 기본 설정
$routes->setDefaultNamespace('App\Controllers'); $routes->setDefaultController('Home'); $routes->setDefaultMethod('index'); $routes->setTranslateURIDashes(false); $routes->set404Override(); $routes->setAutoRoute(True); //아래는 시도한 예시들입니다.
$routes->add('Ajax/Ajaxtesting', 'Ajax\Ajaxtesting::index'); //$routes->add('ajax', 'Ajaxtesting::index', ['namespace' => 'Ajax']); //$routes->add('Ajax/Ajaxtesting', 'Ajax\Ajaxtesting::index'); //$routes->add('/Ajax', 'Ajax\ajaxtesting'); 제가 하고싶은것은 Ajaxtesting.php 컨트롤러에서 여러 함수들을 실행하기전 index라는 함수부터 실행시키려고 합니다. 첫질문이라 이렇게 적는게 맞는가 싶네요. |
|||
다음글 | ci3 session 메모리 관련 질문 (12) | ||
이전글 | CI3 url 헬퍼 redirect가 안됩니다 (3) | ||
변종원(웅파)
/
2022/03/08 11:05:41 /
추천
0
|
스노우린
/
2022/03/08 11:22:22 /
추천
0
-변종원 index를 시도한후에 다른 메소드를 만들 예정이었습니다. 조언해주신것 토대로 디렉토리명을 ajax 컨트롤러 클래스를 카멜식으로 바꾸었습니다. 감사합니다. 그런데 이런 에러가 발생합니다. Fatal error: Cannot declare class App\Controllers\Ajaxtesting, because the name is already in use in /home/onemore/CodeApps/app/Controllers/Ajax/Ajaxtesting.php on line 0 이건 어떻게 해결해야할까요? 접속한 url은 도메인.com//ajax/ajaxtesting/index 입니다. 혹시몰라 컨트롤러 파일도 같이 첨부합니다. <?php namespace App\Controllers; use CodeIgniter\Controller; class AjaxTesting extends Controller { public function index() { $data = [ 'TitleName' => 'ajax연습', ]; echo view('std/header', $data); echo '출력은 되더라'; } }
|
PureAni
/
2022/03/08 11:48:33 /
추천
0
namespace 가 Ajax 폴더까지 안잡고 있네요.
|
스노우린
/
2022/03/08 12:01:55 /
추천
0
namespace App\Controllers\ajax; <p>다음과 같이 네임스페이스를 수정했습니다!</p> |
한대승(불의회상)
/
2022/03/08 12:14:03 /
추천
0
코드이그나이터는 자동으로 라우팅이 잡힙니다. 추가한 ajax 라이팅 모두 주석 처리후 테스트하여 보세요. 하나의 컨트롤러에서 특정 메소드를 거친후 다른 메소드를 호출하고 싶다면 _remap() 메소드를 작성하면 됩니다. |
스노우린
/
2022/03/08 13:57:48 /
추천
0
-한대승 저도 메뉴얼을 보면서 컨트롤러에 1개의 디렉토리는 가능하지만 2개의 디렉토리는 자동으로 잡히지 않아 따로 라우팅 설정을 해줘야한다고 봤습니다. 그래서 처음에는 라우팅 설정 없이 했으나 404 와 함께 controller or its method is not found: \App\Controllers\Ajax::AjaxTesting 라는 문구의 에러가 떠서 디렉토리를 자동으로 잡지 못한다고 생각했습니다. |
스노우린
/
2022/03/08 17:31:10 /
추천
0
해결했습니다. 라우터에서 $routes->add('(도메인 다음으로 입력할 주소)', '(디폴트 네임스페이스부터 컨트롤러까지의 경로)::컨트롤러의 메소드'); 이런식으로 해결했습니다. 더 좋은 방법이 있겠지만 미숙한 실력으로는 이정도가 최선인거같습니다. 혹시 다른 조언 있으시다면 남겨주시면 감사하겠습니다. 더 공부하고 수정해보겠습니다. -한대승 -PureAni 두분께 감사드립니다. |
Ajaxtesting 컨트롤러내의 다른 메소드는 직접 접근하지 않는 건가요?
주소 기준이라 컨트롤러명은 소문자로 작성하세요.
$routes->add('Ajax/ajaxtesting/(:any)', 'Ajax\Ajaxtesting::index');
주소체계는 ajax/ajaxTesting 형태로 만드는게 작업과 인식이 쉽습니다. ajax 디렉토리 AjaxTesting.php 컨트롤러