여는 글
저번에 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 |
---|