CI 묻고 답하기

제목 컨트롤러 폴더 라우팅 문제
카테고리 CI 4 관련
글쓴이 스노우린 작성시각 2022/03/08 10:40:45
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 6827   RSS

현재 컨트롤러에 폴더를 만들어서 작업하려고 합니다. 메뉴얼을 따라서 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

Ajaxtesting 컨트롤러내의 다른 메소드는 직접 접근하지 않는 건가요?

주소 기준이라 컨트롤러명은 소문자로 작성하세요.

$routes->add('Ajax/ajaxtesting/(:any)', 'Ajax\Ajaxtesting::index');

주소체계는 ajax/ajaxTesting 형태로 만드는게 작업과 인식이 쉽습니다. ajax 디렉토리 AjaxTesting.php 컨트롤러

스노우린 / 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() 메소드를 작성하면 됩니다.

http://ci4doc.cikorea.net/incoming/controllers.html#id4

스노우린 / 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 두분께 감사드립니다.