注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇气

终生读书

 
 
 

日志

 
 

CakePHP框架从零使用:MVC模型  

2015-03-27 19:08:11|  分类: cakephp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、配置database.php的数据库连接信息等。(省略)
二、
2.1 创建数据库和model
CREATE DATABASE `data-access`;

USE `data-access`; 

CREATE TABLE `books` ( 

`id` int( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 

`isbn` varchar( 10 ) NOT NULL , 

`title` varchar( 127 ) NOT NULL , 

`description` text NOT NULL , 

`author_name` varchar( 127 ) NOT NULL 

)

2.2 【Model】在model 目录中添加 book.php

<?php 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class Book extends AppModel{ 
    var $name = 'Book'; 
?>

2.3  controller】在controller中添加books_controller.php

<?php 

/* 

* To change this template, choose Tools | Templates 

* and open the template in the editor. 

*/ 

class BooksController extends AppController{ 

    var $name = 'Books'; 

    var $scaffold; 

?>

注意此处的var $scaffold,脚手架会创建一个基本的应用程序,会自动创建CRUD功能。


CakePHP框架从零使用:MVC模型 - 勇气 - 勇气
 二:检索数据

CakePHP中,已经存在了很多方法,可以使开发者很方便地从数据库检索到数据。

修改books_controller.php,去掉脚手架:

<?php 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class BooksController extends AppController{ 
    var $name = 'Books'; 
    //var $scaffold; 
    function index(){ 
        $books = $this->Book->find('all', 
                array( 
                    'fields' =>array( 
                        'Book.isbn', 
                        'Book.title', 
                        'Book.author_name' 
                    ), 
                    'order' => 'Book.title ASC' 
                ) 
                ); 
        $this->set('books',$books); 
    } 

?>

创建/app/views/books/index.ctp

<table> 
  <thead> 
    <th>ISBN</th><th>Title</th><th>Author</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
  </tr> 
  <?php endforeach; ?> 
</table>

CakePHP中,一个model的实例,会被当作controller的属性,如$this->Book,而find()就是book model的一个方法,第一个参数all,就是说明需要获得全部的数据。

CakePHP框架从零使用:MVC模型 - 勇气 - 勇气

 

find()方法是非常灵活的,如一个类似这样的SQL查询

SELECT `Book`.`isbn`, `Book`.`title`, `Book`.`author_name` 
FROM `books` AS `Book` 
WHERE `Book`.`title` LIKE 'A%' 
ORDER BY `Book`.`isbn` DESC 
LIMIT 2;

我们可以用find()来实现:

'conditions' => array('Book.title LIKE' => 'A%'),

下面详细叙述一下find的参数,第一个可以是all、first、count,第二个参数为一数组,数组的key可以是:conditions、fields、order、limit、offset。

三:保存数据

books_controller.php增加add():

function add(){ 
    if(!empty($this->data)){ 
        $this->Book->create(); 
        if(!!$this->Book->save($this->data)){ 
            $this->Session->setFlash('Book is Saved!',true); 
            $this->redirect(array('action'=>'index')); 
        } 
    } 
}

app/views/books/add.ctp:

<?php echo $form->create('Book');?> 
      <fieldset> 
          <legend>Add New Book</legend> 
      <?php 
         echo $form->input('isbn'); 
         echo $form->input('title'); 
         echo $form->input('description'); 
         echo $form->input('author_name'); 
      ?> 
      </fieldset> 
   <?php echo $form->end('Submit');?>

CakePHP框架从零使用:MVC模型 - 勇气 - 勇气

 

在add中,我们首先判断是否从view中返回数据,如果没有返回,那么将会呈现view,当我们提交form表单的时候,数据将会提交到add action。

我们用Book model作为参数,传给FormHelper的create方法,然后,使用其input方法添加input元素,并且使用数据库表中的字段名称作为参数,这将会帮助FormHelper自动绑定。最后,按下提交按钮,所有的数据将会被提交给add,提交的数据可以通过controller的属性$this->data获得。

四:更新记录

books_controller.php增加edit():

function edit($id=null){ 
    if(!$id && empty ($this->data)){ 
        $this->Session->setFlash('Invalid Book',true); 
        $this->redirect(array('action'=>'index')); 
    } 
    if(empty ($this->data)){ 
        $this->data = $this->Book->read(null,$id); 
    } 
    else{ 
        $this->Book->create(); 
        if(!!$this->Book->save($this->data)){ 
            $this->Session->setFlash('已经更新',true); 
            $this->redirect(array('action'=>'index'),null,true); 
        } 
    } 
}

app/views/books/edit.ctp:

<?php echo $form->create('Book');?> 
   <fieldset> 
       <legend>Edit Book</legend> 
      <?php 
         echo $form->input('id'); 
echo $form->input('isbn'); 
         echo $form->input('title'); 
         echo $form->input('description'); 
         echo $form->input('author_name'); 
      ?> 
   </fieldset> 
<?php echo $form->end('Submit');?>

修改app/views/books/index.ctp:

<table> 
  <thead> 
<th>ISBN</th><th>Title</th><th>Author</th><th>Actions</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
<td><?php echo $html->link('编辑','edit/'.$book['Book']['id']) 
       ?></td> 
  </tr> 
  <?php endforeach; ?> 
</table>


CakePHP框架从零使用:MVC模型 - 勇气 - 勇气

 

由此可见,save()在add和edit中都可以使用,不同的是,在edit中,id主键必须在$data中存在。

五:删除记录

books_controller.php增加delete():

function delete($id = null){ 
    if(!$id){ 
        $this->Session->setFlash('Invalid Book',true); 
    } 
    else if($this->Book->del($id)){ 
        $this->Session->setFlash('已经删除',true); 
    } 
    else{ 
        $this->Session->setFlash('删除失败',true); 
    } 
    $this->redirect(array('action'=>'index')); 
}

修改app/views/books/index.ctp:

<table> 
  <thead> 
    <th>ISBN</th><th>Title</th><th>Author</th><th>Actions</th> 
  </thead> 
  <?php foreach($books as $book): ?> 
  <tr> 
    <td><?php echo $book['Book']['isbn'] ?></td> 
    <td><?php echo $book['Book']['title'] ?></td> 
    <td><?php echo $book['Book']['author_name'] ?></td> 
    <td><?php echo $html->link('编辑','edit/'.$book['Book']['id']) 
       ?> 
        <?php echo $html->link('删除', array('action'=>'delete', 
                              $book['Book']['id']) ) ?> 
    </td> 
  </tr> 
  <?php endforeach; ?> 
</table>


注: public $components = array('DebugKit.Toolbar','Session'); 需要引入Session。DebugKit.Toolbar为调试工具。 

  评论这张
 
阅读(79)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017