여는 글


 

저번에 localhost 접속하기 까지 진행했습니다.

 

사실 이번엔 페이지 라우팅(url?)에 대한 이해부터 하고 싶었습니다.

 

서브 페이지로 이동하려면 경로가 어떻게 되는 지 도저히 눈에 안 보였기 때문인데 Node.js, Django를 써봤는데 이렇게까지 페이지 라우팅이 뭔지 모르겠는 프레임워크는 또 처음이네요...

(Django는 url setting 설정 파일이 있거나 Node.js는 그냥 router 파일에 경로만 추가해주면 됐었는데..)

 

어쩔 수 없이 index 페이지에서 DB값을 출력해보기로 했습니다.

 

그래서 일단 이건 다음 시간으로 넘기고 DB 연결부터 하게 됐습니다.

 

 

DB 연결


 

그 전에!! CI는 초기에는 배포모드로 되어있습니다.

 

다른 프레임워크는 배포 전에 따로 설정해주지 않는 이상 개발자모드로 되어있는데 에러 생겨도 Woops! 페이지만 뜨고 원인을 안 알려줘서 당황했었기 때문에 이 설정부터 해보겠습니다.

 

https://itadventure.tistory.com/368 

 

코드이그나이터4 개발자 모드 활성화하기

코드이그나이터4에서는 기본적으로 약간만 오류가 발생해도 Whoops! 라는 안내 멘트와 함께 오류 결과를 알려주지 않습니다. 이는 해킹을 방지하기 위한 시스템적인 조치인데요. 해커들이 사이트

itadventure.tistory.com

 

 

App/Config/Database.php

<?php

namespace Config;

use CodeIgniter\Database\Config;

/**
 * Database Configuration
 */
class Database extends Config
{
    /**
     * The directory that holds the Migrations
     * and Seeds directories.
     *
     * @var string
     */
    public $filesPath = APPPATH . 'Database' . DIRECTORY_SEPARATOR;

    /**
     * Lets you choose which connection group to
     * use if no other is specified.
     *
     * @var string
     */
    public $defaultGroup = 'default';

    /**
     * The default database connection.
     *
     * @var array
     */
    public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'DBMS 유저명',
        'password' => 'DBMS 비밀번호',
        'database' => 'DB 명',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3307, // 기본포트는 3306이나 저의 경우 다른 DB가 해당 포트를 사용중이므로 3307로 지정했습니다.
    ];

    /**
     * This database connection is used when
     * running PHPUnit database tests.
     *
     * @var array
     */
    public $tests = [
        'DSN'      => '',
        'hostname' => '127.0.0.1',
        'username' => '',
        'password' => '',
        'database' => ':memory:',
        'DBDriver' => 'SQLite3',
        'DBPrefix' => 'db_',  // Needed to ensure we're working correctly with prefixes live. DO NOT REMOVE FOR CI DEVS
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

    public function __construct()
    {
        parent::__construct();

        // Ensure that we always set the database group to 'tests' if
        // we are currently running an automated test suite, so that
        // we don't overwrite live data on accident.
        if (ENVIRONMENT === 'testing') {
            $this->defaultGroup = 'tests';
        }
    }
}

 

다른 건 건드릴 필요 없었고 default에 한글로 기재해 놓은 부분만 수정하면 됩니다.

 

 

 

App/Controllers/Home.php

<?php


namespace App\Controllers;

use App\Models\sample_model;



class Home extends BaseController
{

    
     /* public function __construct(){ 
        // parent::__construct(); // BaseController 상속 받을 때는 이 코드 사용 안함!
        $this->load->model('show_db'); // ci3 버전 모델 로드 코드
    } */


    public function index()
    {
        $sampleModel = model(sample_model::class);
        $db      = \Config\Database::connect();
        $builder = $db->table('cidb');
        $query   = $builder->get();  // Produces: SELECT * FROM mytable
        foreach ($query->getResult() as $row) {
            echo $row->id, "\n"; 
            echo $row->title;

        }
        return view('show_db'); // App/Views/show_db.php
    }
}

 

위 코드를 작성하기까지 꽤 구글링을 했었던 터라...

빌더는 아래 사이트 참조!

http://ci4doc.cikorea.net/database/query_builder.html

 

쿼리 빌더 클래스 — CodeIgniter 4.1.9 documentation

Insert된 행의 수, 실패시 false

ci4doc.cikorea.net

 

그리고 모델 load 하는데도 ci3이랑 4랑 문법 자체가 달라서 ci3 코드보다가 에러 뱉은 적이 한 두번이 아닙니다. ㅜㅜ (주석에 보면 있어요)

 

구글링해보면 ci3 자료만 많고 ci4가 없어서 꽤 어렵다고 느끼긴 했고 사실 저 위의 코드가 맞는 지는 모르겠습니다.

(약간 코드 때려놓고 돌아가긴 하네, 하는 느낌이라 불필요한 코드가 섞여있을 수도 있습니다.)

 

이제 마지막으로 아래 코드를 작성해주면 됩니다.

 

App/Models/sample_model.php

<?php

namespace App\Models;


use CodeIgniter\Model;

class SampleModel extends Model {
    protected $primaryKey = "title";
}

?>

 

 

 

닫는 글


 

이렇게 하니까 db 값도 화면에 잘 나오고 하긴 하는데 여전히 이해 안되는 url 규칙 때문에 찝찝해서 다음 번엔 꼭 접속 경로를 파악하는 걸로 하겠습니다.

 

영원히 index 페이지에서만 놀 수는 없으니까요..

'Codeigniter4' 카테고리의 다른 글

[PHP8, Codeigniter4] VSCODE 환경 세팅하기  (0) 2022.05.05