📅  最后修改于: 2020-10-25 04:33:18             🧑  作者: Mango
在本章中,我们将学习如何在FuelPHP中创建一个完整的基于MVC的BookStore应用程序。
使用以下命令在FuelPHP中创建一个名为“ BookStore”的新项目。
oil create bookstore
为我们的应用程序创建一个新的布局。在fuel / app / views / layout.php位置创建一个文件layout.php。代码如下,
在这里,我们使用引导模板。 FuelPHP对引导程序模板具有一流的支持。我们创建了两个变量,标题和内容。 title用于指定当前页面的标题,而content用于指定当前页面的详细信息。
创建一个新的控制器Controller_Book以显示,添加,编辑和删除该书。创建一个新文件,fuel / app / classes / controller / book.php并放置以下代码。
template->title = "Book index page";
$this->template->content = $view;
}
}
在这里,我们通过继承模板控制器创建了工作簿控制器,并将默认模板设置为fuel / app / views / layout.php。
创建一个文件夹,在fuel / app / views文件夹下的views目录中预订。然后,在book文件夹中创建一个文件index.php并添加以下代码,
index page
到目前为止,我们已经创建了一个基本的书本控制器。
更新默认路由以将应用程序的主页设置为书本控制器。打开默认的路由配置文件,fuel / app / config / routes.php,然后进行如下更改。
'book/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
现在,请求URL http:// localhost:8080 /将返回书控制器的索引页,如下所示:
使用以下命令在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
)
使用位于fuel / app / config的数据库配置文件db.php配置数据库。
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,
),
);
更新主配置文件以包括ORM软件包。它位于“ fuel / app / config /”。
'always_load' => array (
'packages' => array (
'orm'
),
),
在book.php中的“ fuel / app / classes / model”中创建一个图书模型。它的定义如下-
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')
));
}
在这里,我们将数据库详细信息指定为模型的属性。它还具有验证详细信息。
在工作簿控制器中更新index操作,以列出数据库中的可用工作簿。
set('books', $books);
// set the template variables
$this->template->title = "Book index page";
$this->template->content = $view;
}
}
在这里,我们已使用orm从数据库中获取书籍详细信息,然后将书籍详细信息传递给视图。
更新位于“ fuel / app / views / book”的视图文件index.php。完整的更新代码如下:
现在,请求URL,http:// localhost:8080 /将显示如下页面:
创建将新书添加到书店的功能。如下所示在图书控制器中创建一个新动作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异常。
将书籍信息存储到数据库中。
成功后,将用户重定向到索引页面。否则,请再次显示该表格。
我们两者都在做,既显示表单又以相同的动作处理表单。当用户第一次调用该操作时,它将显示该表单。当用户输入书籍信息并提交数据时,它将处理该表格。
创建用于添加书本操作的视图。创建一个新文件,fuel / app / views / book / add.php,然后输入以下代码,
Book form
在这里,我们仅显示在action方法中创建的表单。此外,我们还会显示错误(如果有)。
请求网址http:// localhost:8080 / book / add或单击“添加书本导航”链接,将显示如下形式,
输入书籍信息并提交页面后,书籍信息将被存储到数据库中,并且页面将被重定向到索引页面,如下所示。
创建用于编辑和更新现有书籍信息的功能。如下所示,在工作簿控制器中创建一个新动作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搜索所请求的书。如果在数据库中找到任何书籍信息,它将继续并以表格形式显示书籍信息。否则,它将抛出文件未找到异常并退出。
创建用于编辑书本操作的视图。在这里,我们使用与添加操作相同的视图。
点击图书清单页面中任何图书的编辑链接,它将显示相应的图书形式,如下所示:
创建从书店删除书的功能。如下所示在图书控制器中创建一个新动作action_delete,
public function action_delete($id = null) {
if ( ! ($book = Model_Book::find($id))) {
throw new HttpNotFoundException();
} else {
$book->delete();
}
Response::redirect('book');
}
在这里,我们正在使用提供的书籍ID检查数据库中是否存在书籍。如果找到该书,则将其删除并重定向到索引页面。否则,将显示未找到页面的信息。
通过单击图书清单页面中的删除链接来检查删除操作。它将删除请求的书,然后再次重定向到索引页面。
最后,创建了添加,编辑,删除和列出图书信息的所有功能。
与其他基于MVC的PHP框架相比,FuelPHP简单,灵活,可伸缩且易于配置。它提供了现代MVC框架的所有功能。它可以按原样使用,也可以完全更改以满足我们的需求。最重要的是,它是Web开发的绝佳选择。