📜  FuelPHP-完整的工作示例

📅  最后修改于: 2020-10-25 04:33:18             🧑  作者: Mango


在本章中,我们将学习如何在FuelPHP中创建一个完整的基于MVC的BookStore应用程序。

步骤1创建一个项目

使用以下命令在FuelPHP中创建一个名为“ BookStore”的新项目。

oil create bookstore

步骤2建立版面

为我们的应用程序创建一个新的布局。在fuel / app / views / layout.php位置创建一个文件layout.php。代码如下,

fuel / app / views / layout.php

 
       
        
      <?php echo $title; ??>  
      
       
        
       
       
     
   
    
        
      
      

在这里,我们使用引导模板。 FuelPHP对引导程序模板具有一流的支持。我们创建了两个变量,标题和内容。 title用于指定当前页面的标题,而content用于指定当前页面的详细信息。

步骤3建立控制器

创建一个新的控制器Controller_Book以显示,添加,编辑和删除该书。创建一个新文件,fuel / app / classes / controller / book.php并放置以下代码。

Fuel / app / classes / controller / book.php

template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   } 

在这里,我们通过继承模板控制器创建了工作簿控制器,并将默认模板设置为fuel / app / views / layout.php。

步骤4创建索引视图

创建一个文件夹,在fuel / app / views文件夹下的views目录中预订。然后,在book文件夹中创建一个文件index.php并添加以下代码,

fuel / app / views / index.php

index page

到目前为止,我们已经创建了一个基本的书本控制器。

步骤5修改默认路由

更新默认路由以将应用程序的主页设置为书本控制器。打开默认的路由配置文件,fuel / app / config / routes.php,然后进行如下更改。

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 /将返回书控制器的索引页,如下所示:

返回索引页

步骤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配置数据库。

燃料/应用程序/配置/ 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, 
      ), 
   );

步骤8包括Orm软件包

更新主配置文件以包括ORM软件包。它位于“ fuel / app / config /”。

fuel / app / config / config.php

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
), 

步骤9建立模型

在book.php中的“ fuel / app / classes / model”中创建一个图书模型。它的定义如下-

燃料/应用程序/类/模型/book.php

 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显示书籍

在工作簿控制器中更新index操作,以列出数据库中的可用工作簿。

燃料/应用程序/类/控制器/book.php

set('books', $books);  
         
         // set the template variables
         $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   }

在这里,我们已使用orm从数据库中获取书籍详细信息,然后将书籍详细信息传递给视图。

步骤11更新索引视图

更新位于“ fuel / app / views / book”的视图文件index.php。完整的更新代码如下:

Fuel / app / views / book / index.php

# Title Author Price
Edit Delete

现在,请求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,然后输入以下代码,

  

Book form

在这里,我们仅显示在action方法中创建的表单。此外,我们还会显示错误(如果有)。

步骤14检查添加书本操作

请求网址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检查删除动作

通过单击图书清单页面中的删除链接来检查删除操作。它将删除请求的书,然后再次重定向到索引页面。

最后,创建了添加,编辑,删除和列出图书信息的所有功能。

与其他基于MVC的PHP框架相比,FuelPHP简单,灵活,可伸缩且易于配置。它提供了现代MVC框架的所有功能。它可以按原样使用,也可以完全更改以满足我们的需求。最重要的是,它是Web开发的绝佳选择。