FuelPHP-완전한 작업 예
이 장에서는 FuelPHP에서 완전한 MVC 기반 BookStore 애플리케이션을 만드는 방법을 배웁니다.
1 단계 : 프로젝트 만들기
다음 명령을 사용하여 FuelPHP에서 "BookStore"라는 새 프로젝트를 만듭니다.
oil create bookstore
2 단계 : 레이아웃 만들기
응용 프로그램에 대한 새 레이아웃을 만듭니다. fuel / app / views / layout.php 위치에 layout.php 파일을 생성하십시오. 코드는 다음과 같습니다.
fuel / app / views / layout.php
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE = edge">
<meta name = "viewport" content = "width = device-width, initial-scale = 1">
<title><?php echo $title; ?></title>
<!-- Bootstrap core CSS -->
<link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src = "/assets/js/bootstrap.min.js"></script>
</head>
<body>
<nav class = "navbar navbar-inverse navbar-fixed-top">
<div class = "container">
<div class = "navbar-header">
<button type = "button" class = "navbar-toggle collapsed"
datatoggle = "collapse" data-target = "#navbar"
aria-expanded = "false" ariacontrols = "navbar">
<span class= "sr-only">Toggle navigation</span>
<span class = "icon-bar"></span>
<span class = "icon-bar"></span>
<span class = "icon-bar"></span>
</button>
<a class = "navbar-brand" href = "#">FuelPHP Sample</a>
</div>
<div id = "navbar" class = "collapse navbar-collapse">
<ul class = "nav navbar-nav">
<li class = "active"><a href = "/book/index">Home</a></li>
<li><a href = "/book/add">Add book</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class = "container">
<div class = "starter-template" style = "padding: 50px 0 0 0;">
<?php echo $content; ?>
</div>
</div><!-- /.container -->
</body>
</html>
여기서는 부트 스트랩 템플릿을 사용하고 있습니다. FuelPHP는 부트 스트랩 템플릿에 대한 최고 수준의 지원을 제공합니다. 제목과 내용이라는 두 가지 변수를 만들었습니다. title은 현재 페이지의 제목을 지정하는 데 사용되며 콘텐츠는 현재 페이지의 세부 정보를 지정하는 데 사용됩니다.
3 단계 : 컨트롤러 생성
새 컨트롤러 인 Controller_Book을 만들어 책을 표시, 추가, 편집 및 삭제합니다. 새 파일 fuel / app / classes / controller / book.php를 만들고 다음 코드를 배치합니다.
fuel / app / classes / controller / book.php
<?php
class Controller_Book extends Controller_Template {
public $template = 'layout';
public function action_index() {
// Create the view object
$view = View::forge('book/index');
// set the template variables
$this->template->title = "Book index page";
$this->template->content = $view;
}
}
여기에서는 템플릿 컨트롤러를 상속하여 북 컨트롤러를 만들고 기본 템플릿을 fuel / app / views / layout.php로 설정했습니다.
4 단계 : 인덱스보기 만들기
폴더를 만들고 fuel / app / views 폴더 아래의보기 디렉토리에 예약하십시오. 그런 다음 책 폴더 안에 index.php 파일을 만들고 다음 코드를 추가하십시오.
fuel / app / views / index.php
<h3>index page</h3>
지금까지 기본적인 북 컨트롤러를 만들었습니다.
5 단계 : 기본 경로 수정
기본 경로를 업데이트하여 애플리케이션의 홈 페이지를 예약 컨트롤러로 설정합니다. 기본 라우팅 구성 파일 인 fuel / app / config / routes.php를 열고 다음과 같이 변경하십시오.
fuel / app / config / routes.php
<?php
return array (
'_root_' => 'book/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
이제 URL을 요청하면 http : // localhost : 8080 /는 다음과 같이 책 컨트롤러의 색인 페이지를 반환합니다.
6 단계 : 데이터베이스 생성
다음 명령을 사용하여 MySQL 서버에 새 데이터베이스를 만듭니다.
create database tutorialspoint_bookdb
그런 다음 다음 명령을 사용하여 데이터베이스 내부에 테이블을 만듭니다.
CREATE TABLE book (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(80) NOT NULL,
author VARCHAR(80) NOT NULL,
price DECIMAL(10, 2) NOT NULL
);
다음 SQL 문을 사용하여 일부 샘플 레코드를 테이블에 삽입합니다.
INSERT
INTO
book(title,
author,
price)
VALUES(
'The C Programming Language',
'Dennie Ritchie',
25.00
),(
'The C++ Programming Language',
'Bjarne Stroustrup',
80.00
),(
'C Primer Plus (5th Edition)',
'Stephen Prata',
45.00
),('Modern PHP', 'Josh Lockhart', 10.00),(
'Learning PHP, MySQL & JavaScript, 4th Edition',
'Robin Nixon',
30.00
)
7 단계 : 데이터베이스 구성
fuel / app / config에있는 데이터베이스 구성 파일 db.php를 사용하여 데이터베이스를 구성하십시오.
fuel / app / config / db.php
<?php
return array (
'development' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_bookdb',
'username' => 'root',
'password' => 'password',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
'production' => array (
'type' => 'mysqli',
'connection' => array (
'hostname' => 'localhost',
'port' => '3306',
'database' => 'tutorialspoint_bookdb',
'username' => 'root',
'password' => 'password',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
);
8 단계 : Orm 패키지 포함
ORM 패키지를 포함하도록 기본 구성 파일을 업데이트하십시오. "fuel / app / config /"에 있습니다.
fuel / app / config / config.php
'always_load' => array (
'packages' => array (
'orm'
),
),
9 단계 : 모델 생성
“fuel / app / classes / model”에있는 book.php에서 책 모델을 만듭니다. 다음과 같이 정의됩니다-
fuel / app / classes / model / book.php
<?php
class Model_Book extends Orm\Model {
protected static $_connection = 'production';
protected static $_table_name = 'book';
protected static $_primary_key = array('id');
protected static $_properties = array (
'id',
'title' => array (
'data_type' => 'varchar',
'label' => 'Book title',
'validation' => array (
'required',
'min_length' => array(3),
'max_length' => array(80)
),
'form' => array (
'type' => 'text'
),
),
'author' => array (
'data_type' => 'varchar',
'label' => 'Book author',
'validation' => array (
'required',
),
'form' => array (
'type' => 'text'
),
),
'price' => array (
'data_type' => 'decimal',
'label' => 'Book price',
'validation' => array (
'required',
),
'form' => array (
'type' => 'text'
),
),
);
protected static $_observers = array('Orm\\Observer_Validation' => array (
'events' => array('before_save')
));
}
여기에서는 모델의 속성으로 데이터베이스 세부 정보를 지정했습니다. 유효성 검사 세부 정보도 있습니다.
10 단계 : 책 표시
책 컨트롤러에서 색인 조치를 업데이트하여 데이터베이스에서 사용 가능한 책을 나열하십시오.
fuel / app / classes / controller / book.php
<?php
class Controller_Book extends Controller_Template {
public $template = 'layout';
public function action_index() {
// Create the view object
$view = View::forge('book/index');
// fetch the book from database and set it to the view
$books = Model_Book::find('all');
$view->set('books', $books);
// set the template variables
$this->template->title = "Book index page";
$this->template->content = $view;
}
}
여기에서 우리는 orm 데이터베이스에서 도서 세부 정보를 가져온 다음 도서 세부 정보를 뷰에 전달했습니다.
11 단계 : 인덱스보기 업데이트
“fuel / app / views / book”에있는 view 파일 index.php를 업데이트합니다. 전체 업데이트 코드는 다음과 같습니다.
fuel / app / views / book / index.php
<table class = "table">
<thead>
<tr>
<th>#</th>
<th>Title</th>
<th>Author</th>
<th>Price</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
foreach($books as $book) {
?>
<tr>
<td><?php echo $book['id']; ?></td>
<td><?php echo $book['title']; ?></td>
<td><?php echo $book['author']; ?></td>
<td><?php echo $book['price']; ?></td>
<td>
<a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a>
<a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
<ul>
</ul>
이제 URL을 요청하면 http : // localhost : 8080 /는 다음과 같이 페이지를 표시합니다.
12 단계 : 책을 추가하는 작업 만들기
서점에 새 책을 추가하는 기능을 만듭니다. 다음과 같이 북 컨트롤러에 새 액션 action_add를 생성합니다.
public function action_add() {
// create a new fieldset and add book model
$fieldset = Fieldset::forge('book')->add_model('Model_Book');
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
// build the form and set the current page as action
$formHtml = $fieldset->build(Uri::create('book/add'));
$view = View::forge('book/add');
$view->set('form', $formHtml, false);
if (Input::param() != array()) {
try {
$book = Model_Book::forge();
$book->title = Input::param('title');
$book->author = Input::param('author');
$book->price = Input::param('price');
$book->save();
Response::redirect('book');
} catch (Orm\ValidationFailed $e) {
$view->set('errors', $e->getMessage(), false);
}
}
$this->template->title = "Book add page";
$this->template->content = $view; }
여기에서는 다음 두 가지 프로세스가 수행됩니다.
Fieldset 메서드와 Book 모델을 사용하여 책을 추가하는 책 양식을 작성합니다.
사용자가 도서 정보를 입력하고 양식을 제출할 때 도서 양식을 처리합니다. 제출 된 데이터의 Input :: param () 메서드를 확인하여 찾을 수 있습니다. 양식 처리에는 다음 단계가 포함됩니다.
책 정보를 수집하십시오.
도서 정보를 확인합니다. 저장 방법 전에 호출 할 유효성 검사를 이미 설정했습니다. 유효성 검사가 실패하면 Orm \ ValidationFailed 예외가 발생합니다.
도서 정보를 데이터베이스에 저장합니다.
성공하면 사용자를 색인 페이지로 리디렉션합니다. 그렇지 않으면 양식을 다시 표시하십시오.
양식을 표시하고 동일한 작업으로 양식을 처리하면서 두 가지를 모두 수행합니다. 사용자가 처음으로 작업을 호출하면 양식이 표시됩니다. 사용자가 도서 정보를 입력하고 데이터를 제출하면 양식이 처리됩니다.
13 단계 : 책 추가 조치를위한보기 작성
책 추가 조치에 대한보기를 작성하십시오. 새 파일 fuel / app / views / book / add.php를 만들고 다음 코드를 입력합니다.
<style>
#form table {
width: 90%;
}
#form table tr {
width: 90%
}
#form table tr td {
width: 50%
}
#form input[type = text], select {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
#form input[type = submit] {
width: 100%;
background-color: #3c3c3c;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
#form div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
}
</style>
<div id = "form">
<h2>Book form</h2>
<?php
if(isset($errors)) {
echo $errors;
}
echo $form;
?>
</div>
여기서는 action 메소드에서 생성 된 폼만 보여주고 있습니다. 또한 오류가있는 경우 표시합니다.
14 단계 : 책 추가 조치 확인
URL http : // localhost : 8080 / book / add를 요청하거나 책 탐색 추가 링크를 클릭하면 다음과 같은 양식이 표시됩니다.
형태
데이터가있는 양식
도서 정보를 입력하고 페이지를 제출하면 도서 정보가 데이터베이스에 저장되고 다음과 같이 페이지가 색인 페이지로 리디렉션됩니다.
새로 추가 된 도서가있는 도서 목록
15 단계 : 책을 편집하기위한 조치 작성
기존 도서 정보를 편집하고 업데이트하는 기능을 만듭니다. 다음과 같이 책 컨트롤러에서 새 액션 action_edit를 만듭니다.
public function action_edit($id = false) {
if(!($book = Model_Book::find($id))) {
throw new HttpNotFoundException();
}
// create a new fieldset and add book model
$fieldset = Fieldset::forge('book')->add_model('Model_Book');
$fieldset->populate($book);
// get form from fieldset
$form = $fieldset->form();
// add submit button to the form
$form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
// build the form and set the current page as action
$formHtml = $fieldset->build(Uri::create('book/edit/' . $id));
$view = View::forge('book/add');
$view->set('form', $formHtml, false);
if (Input::param() != array()) {
try {
$book->title = Input::param('title');
$book->author = Input::param('author');
$book->price = Input::param('price');
$book->save();
Response::redirect('book');
} catch (Orm\ValidationFailed $e) {
$view->set('errors', $e->getMessage(), false);
}
}
$this->template->title = "Book edit page";
$this->template->content = $view;
}
페이지를 처리하기 전에 요청 된 책을 ID로 검색한다는 점을 제외하면 추가 조치와 유사합니다. 데이터베이스에서 도서 정보가 발견되면 계속 진행하여 양식에 도서 정보를 표시합니다. 그렇지 않으면 파일을 찾을 수 없음 예외가 발생하고 종료됩니다.
16 단계 : 편집 작업에 대한보기 만들기
책 편집 조치에 대한보기를 작성하십시오. 여기에서는 추가 작업에 사용 된 것과 동일한보기를 사용합니다.
17 단계 : 책 편집 작업 확인.
도서 목록 페이지에서 책의 편집 링크를 클릭하면 다음과 같은 해당 도서 양식이 표시됩니다.
도서 세부 정보가있는 양식
18 단계 : 책 삭제 조치 작성
서점에서 책을 삭제하는 기능을 만듭니다. 다음과 같이 북 컨트롤러에서 새 액션 action_delete를 생성합니다.
public function action_delete($id = null) {
if ( ! ($book = Model_Book::find($id))) {
throw new HttpNotFoundException();
} else {
$book->delete();
}
Response::redirect('book');
}
여기에서는 제공된 도서 ID를 사용하여 데이터베이스에 도서가 있는지 확인합니다. 책이 발견되면 삭제되고 색인 페이지로 리디렉션됩니다. 그렇지 않으면 페이지를 찾을 수없는 정보가 표시됩니다.
19 단계 : 삭제 작업 확인
도서 목록 페이지에서 삭제 링크를 클릭하여 삭제 작업을 확인하십시오. 요청 된 책을 삭제 한 다음 다시 색인 페이지로 리디렉션됩니다.
마지막으로 책 정보를 추가, 편집, 삭제 및 나열하는 모든 기능이 생성됩니다.
FuelPHP는 다른 MVC 기반 PHP 프레임 워크에 비해 간단하고 유연하며 확장 가능하며 쉽게 구성 할 수 있습니다. 최신 MVC 프레임 워크의 모든 기능을 제공합니다. 그대로 사용하거나 필요에 맞게 완전히 변경할 수 있습니다. 무엇보다도 웹 개발을위한 훌륭한 선택입니다.