CodeIgniter4 입문 공식 강좌 (2) DB 데이터 표시
28129 단어 PHPcodeignitercodeigniter4tech
CodeIgniter 4 시작 공식 자습서 (1) 정적 페이지 표시
계속
카탈로그
MySQL에서 데이터베이스 준비
강좌에 사용할 데이터베이스를 만듭니다.
http://localhost:81/의 phpMyAdmin에 액세스합니다.
데이터베이스 만들기
데이터베이스
ci4tutorial
를 만듭니다.명령이 생성되면 다음을 수행합니다.
CREATE DATABASE `ci4tutorial` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
사용자dbuser
에게 권한을 수여ci4tutorial
.다음 SQL 문을 실행합니다.GRANT ALL PRIVILEGES ON `ci4tutorial`.* TO `dbuser`@`%`;
테이블 작성
news
양식을 만듭니다.다음 SQL 문을 실행합니다.CREATE TABLE news (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(128) NOT NULL,
slug VARCHAR(128) NOT NULL,
body TEXT NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);
데이터 삽입
초기 데이터를 삽입합니다.다음 SQL 문을 실행합니다.
INSERT INTO news VALUES
(1,'Elvis sighted','elvis-sighted','Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app.'),
(2,'Say it isn\'t so!','say-it-isnt-so','Scientists conclude that some programmers have a sense of humor.'),
(3,'Caffeination, Yes!','caffeination-yes','World\'s largest coffee shop open onsite nested coffee shop for staff only.');
삽입된 데이터를 확인합니다.
CodeIgniter4에 대한 데이터베이스 설정
.env
다음과 같은 설정 파일의 데이터베이스 연결 정보.DB_DATABASE
가 ci4tutorial
로 변경되었습니다.DB_DATABASE = ci4tutorial
DB_USERNAME = dbuser
DB_PASSWORD = dbpassword
database.default.hostname = database
database.default.database = "${DB_DATABASE}"
database.default.username = "${DB_USERNAME}"
database.default.password = "${DB_PASSWORD}"
database.default.DBDriver = MySQLi
database.default.DBPrefix =
NewsModel 생성
news
액세스 테이블NewsModel
을 만듭니다.app/Models/NewsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
protected $table = 'news';
public function getNews($slug = false)
{
if ($slug === false) {
return $this->findAll();
}
return $this->where(['slug' => $slug])->first();
}
}
CodeIgniter\Model
의findAll()
방법과 first()
방법을 사용하여 news
표에서 데이터를 얻습니다.뉴스 컨트롤러 만들기
News
디렉터 생성app/Controllers/News.php
<?php
namespace App\Controllers;
use App\Models\NewsModel;
use CodeIgniter\Controller;
use CodeIgniter\Exceptions\PageNotFoundException;
class News extends Controller
{
public function index()
{
$model = model(NewsModel::class);
$data = [
'news' => $model->getNews(),
'title' => 'News archive',
];
dd($data);
echo view('templates/header', $data);
echo view('news/overview', $data);
echo view('templates/footer', $data);
}
public function view($slug = null)
{
$model = model(NewsModel::class);
$data['news'] = $model->getNews($slug);
if (empty($data['news'])) {
throw new PageNotFoundException('Cannot find the news item: ' . $slug);
}
$data['title'] = $data['news']['title'];
dd($data);
echo view('templates/header', $data);
echo view('news/view', $data);
echo view('templates/footer', $data);
}
}
CodeIgniter4의 함수 실례화 모델 클래스.CodeIgniter4의
model()
함수는 dd()
의 값을 보여 줍니다.라우팅 설정
지난번에는 루트 설정으로 인해 모든 루트가
$data
컨트롤러에 의해 처리되었기 때문에 현재 컨트롤러에 접근할 수 없습니다Pages
.따라서
News
액세스 컨트롤러 경로를 추가합니다.News
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -33,6 +33,8 @@ $routes->setAutoRoute(true);
// route since we don't have to scan directories.
$routes->get('/', 'Home::index');
+$routes->get('news/(:segment)', 'News::view/$1');
+$routes->get('news', 'News::index');
$routes->get('(:any)', 'Pages::view/$1');
/*
http://localhost/news에 접근할 때CodeIgniter4의 app/Config/Routes.php
방법은 dd()
의 값을 표시합니다.데이터베이스에 등록된 레코드의 값을 볼 수 있습니다.
방문도 해보세요http://localhost/news/elvis-sighted.
데이터베이스와의 교환을 확인한 후 디버깅용
$data
함수를 삭제합니다.--- a/app/Controllers/News.php
+++ b/app/Controllers/News.php
@@ -15,7 +15,6 @@ class News extends Controller
'news' => $model->getNews(),
'title' => 'News archive',
];
- dd($data);
echo view('templates/header', $data);
echo view('news/overview', $data);
@@ -33,7 +32,6 @@ class News extends Controller
}
$data['title'] = $data['news']['title'];
- dd($data);
echo view('templates/header', $data);
echo view('news/view', $data);
View 파일 생성
목록 페이지의
dd()
를 추가합니다.<h2><?= esc($title) ?></h2>
<?php if (! empty($news) && is_array($news)): ?>
<?php foreach ($news as $news_item): ?>
<h3><?= esc($news_item['title']) ?></h3>
<div class="main">
<?= esc($news_item['body']) ?>
</div>
<p><a href="/news/<?= esc($news_item['slug'], 'url') ?>">View article</a></p>
<?php endforeach ?>
<?php else: ?>
<h3>No News</h3>
<p>Unable to find any news for you.</p>
<?php endif ?>
CodeIgniter4의 app/Views/news/overview.php
함수는 HTML에서 도피 처리를 하는 함수입니다.XSS의 취약성이 만들어지지 않도록 원칙적으로 보기에 있는 모든 변수는 이 함수로 처리된다.
또한 탭
esc()
속성의 값을 출력할 때 두 번째 파라미터에 상하문<a>
을 지정합니다href
와 같이 사용합니다.다음은 개별 문장 페이지의
url
를 추가합니다.<h2><?= esc($news['title']); ?></h2>
<p><?= esc($news['body']); ?></p>
이렇게 되면 시야 파일이 모두 준비된다.확인 표시
방문해 보세요http://localhost/news.
포스트 목록이 표시됩니다.
View article 액세스http://localhost/news/elvis-sighted를 클릭합니다.
개별 문장도 보였다.
CodeIgniter4 입문 공식 강좌 (3) DB에 데이터 추가
계속해.
참고 자료
Reference
이 문제에 관하여(CodeIgniter4 입문 공식 강좌 (2) DB 데이터 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kenjis/articles/dbc73878fc4abe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)