이번 순서에서는 CI4의 시작 페이지의 초기 설정을 내가 원하는 페이지로 변경을 하고, 각 화면마다 공통으로 들어가는 페이지(Header, Footer)를 적용하고, 정적 파일을 어디에 위치 시키는지 알아보려고 한다.
1. 컨트롤러 작성
컨트롤러는 사용자의 요청에 대해 어떤 동작을 할지 정의하는 클래스이다. 아래와 같이 메인 페이지를 처리할 MainController.php를 ..app/Controllers에 생성 후 이 컨트롤러 내에서 home 메소드를 정의하고, 해당 메소드에서 메인 페이지의 뷰를 반환하도록 한다.
<?php
namespace App\Controllers;
/*
이 줄은 PHP의 네임스페이스(namespace) 기능을 사용하여, 현재 파일이 App\Controllers 네임스페이스 안에 있음을 선언.
네임스페이스는 클래스, 함수, 상수 등의 이름 충돌을 방지하기 위해 도입된 기능.
CI4는 MVC 패턴을 따르며, 컨트롤러는 일반적으로 App\Controllers 네임스페이스 아래에 위치.
*/
class MainController extends BaseController{
/*
MainController라는 새로운 클래스를 선언하며, BaseController 클래스를 상속.
BaseController는 CI4 또는 사용자가 정의한 공통 기능을 포함하는 클래스로 보통 사용.
이를 통해 모든 컨트롤러에서 공통적으로 사용되는 기능들을 BaseController에 정의하고,
각 컨트롤러에서 이를 재사용 가능.
*/
public function home(){
/*
home 메소드는 접근 제한자로 public을 사용하여 외부에서 접근 가능하게 설정 되어있다.
이 메소드는 웹 애플리케이션에서 어떤 경로(예: /home)로 요청이 오면 실행.
이에 대한 구체적인 라우팅 설정은 CI4의 라우팅 설정 파일에서 정의.
*/
return view('home');
/*
CI4의 view 헬퍼 함수를 호출, app/Views/home.php에 해당하는 뷰 파일을 로드하고, 이를 클라이언트에게 반환.
*/
}
}
?>
주석에 쓰여진대로 사용자가 /home 경로로 요청을 보냈을 때, MainController의 home 메소드가 호출되고, home.php 뷰 파일의 내용이 사용자에게 보여진다.
2. 공통 페이지 작성
각 화면에서 공통으로 사용하게 될 헤더와 푸터를 ../app/View/commons에 header.php, footer.php로 생성한다.
부트스트랩과 구글폰트의 Noto Sans KR을 사용할 것이다.
아래는 예시 코드이다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$title?></title>
<!-- 공통으로 사용하지만 화면의 title은 화면마다 다르게 줘야해 변수로 받아올 것이다-->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap">
<link rel="stylesheet" href="css/commons.css">
</head>
<body>
<footer>© 2024 wlgusdlqslek. 모든 권리 보유.</footer>
</body>
</html>
3. 정적 파일 저장
CI4에서 정적 파일은 ../public/ 하위에 저장이 된다. CSS, JS의 구분을 위해 public에 css라는 폴더를 만들고 commons.css 파일을 만들고 아래 폰트 스타일만 주었다.
body {font-family: 'Noto Sans KR', sans-serif;}
4. home.php(뷰) 파일 작성
<?php
//<title>에 들어갈 변수에 값을 넣는다
$title = "메인 페이지";
echo view("commons/header", ['title' => $title]);
/*
첫 번째 매개변수: 뷰 파일의 이름. 이 이름은 app/Views 디렉토리 내의 뷰 파일을 지정.
두 번째 매개변수 (선택적): 뷰로 전달될 데이터를 담은 연관 배열. 이 배열의 키는 뷰 파일 내에서 변수 이름으로 사용. 이 매개변수는 선택 사항이며, 기본값은 빈 배열.
세 번째 매개변수 (선택적): 이 매개변수는 불린(boolean) 값으로, 뷰의 결과를 직접 출력할지(false, 기본값), 아니면 문자열로 반환할지(true)를 결정. 이 값이 true로 설정되면, 뷰의 결과는 바로 브라우저로 출력되지 않고 문자열로 반환.
*/
?>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card mt-5">
<div class="card-body">
<h2 class="card-title text-center text-bold">로그인</h2>
<form>
<div class="form-group">
<label for="idInput">아이디</label>
<input type="text" class="form-control" id="idInput" aria-describedby="idHelp" placeholder="아이디 입력">
</div>
<div class="form-group">
<label for="passwordInput">비밀번호</label>
<input type="password" class="form-control" id="passwordInput" placeholder="비밀번호 입력">
</div>
<button type="submit" class="btn btn-primary btn-block">로그인</button>
</form>
</div>
</div>
</div>
</div>
</div>
<?php
echo view("commons/footer");
?>
5. 라우터 설정 변경
../app/Config/Routes.php를 열어보자
$routes->get('/', 'Home::index');로 작성된 것을 $routes->get('/', 'MainController::home'); 으로 변경하고 저장하자.
위 변경한 설정은 RouteCollection 객체의 get 메소드를 사용하여, 애플리케이션의 루트 URL ('/') 에 대한 GET 요청을 처리할 컨트롤러와 메소드를 정의한다.
여기서 'MainController::home'은 MainController 클래스의 home 메소드를 가리킨다.
get 메소드의 첫 번째 매개변수는 요청을 받을 URL 패턴이고, 예제에서는 애플리케이션의 루트 URL을 의미하는 '/'이다.
두 번째 매개변수는 해당 URL 패턴에 대한 요청이 발생했을 때 호출될 컨트롤러와 메소드를 지정하는 문자열이다.
컨트롤러명::메소드명 형식으로 작성한다.
이 경우, 사용자가 웹 브라우저에서 루트 URL에 접속하면 MainController의 home 메소드가 실행되어, 내가 작성 화면이 보이게 된다.

'개발 > php' 카테고리의 다른 글
코드이그나이터4 - 단순 로그인 기능 구현 DB 연결 (2) (0) | 2024.03.11 |
---|---|
코드이그나이터4 - 단순 로그인 기능 구현 (1) (0) | 2024.03.06 |
코드이그나이터 4 (1) - 시작하기 (0) | 2024.02.27 |
php.ini 확장 기능 설정 (0) | 2024.02.27 |
php - MYSQL 연동 테스트 및 설정 (0) | 2024.01.29 |
댓글