美高梅4688官方网站web程序员憎恨创建以后可能根本用不到的forms,//使用news这个模型function index(){

宗旨的布局:数据库设置 作者这边运用的是数据库newsapache : rewrite module 展开 笔者这里是设置好一个虚构主机指向到,借使是虚拟目录形式,查占星关文书档案。

第五章 Scaffolding (脚手架?)

新建news表 里面的字段 id,title,content,time,sort

Scaffolding是一个很棒的门道,使得先前时代开辟的一部分web应用能够运行起来。开始时代的数据库方式是不安宁的,相当轻巧生成。Scaffolding有个下跌倾向:web程序员痛恨成立今后可能一贯用不到的forms。为了减少技士的这种重复劳动, Cake中带有了Scaffolding。Scaffolding分析数据库,创设一些专门的学业的利用add、delete、和edit按键的lists,创制输入的forms,以至查看数据库中叁个item的标准views。为了在前后相继中的controller中增加Scaffolding,要求增添$scaffold变量:

因为自然要操作news那些表,所以先创设news的model/app/models/news.php

 注意save操作是怎样放置在二个原则语句中:要是你筹算保存数据到model中,cake自动尝试确数据科学(根据你提供的平整)。能够查阅第十章掌握越来越多关于科学准则(validation).如若不想查看准确性直接保存数据,使用save($data,false卡塔尔国;

?class news extends AppModel{var $name=''news''; }?

 

若是未有var $name=''news'';这一行 模型会默认为要管理的表是newss(个人测度,没试过卡塔尔(قطر‎是那些性格来标记应用的数据库 var $useTable=''users''; $name 只是标记model 的name 属性$table 估算是在拍卖model之间涉及的时候使用的呢? 保存此狐疑然后新建/app/controllers/news_controller.php?class newsController extends AppController{var $uses=array(''news''卡塔尔; //使用news这些模型function index(卡塔尔{ $this-set(''lists'',$this-news-findAll(卡塔尔国卡塔尔国} //私下认可function add($id=0卡塔尔(قطر‎{ if($id卡塔尔国{ $this-set(''id'',$id卡塔尔(قطر‎; $this-news-id=$id; } if(!empty($this-data)){ $ret=$this-news-save($this-data[''news'']卡塔尔; if($ret卡塔尔(قطر‎{ if($id卡塔尔(قطر‎ $this-flash(''更新成功'',''/news/''State of Qatar; else $this-flash(''增多家成业就'',''/news/''State of Qatar; }else{ if($id卡塔尔$this-flash(''更新失败'',''/news/add/''.$id卡塔尔; else $this-flash(''增添退步'',''/news/add''卡塔尔; } } exit(卡塔尔国;} //加多/改善function delete($id卡塔尔国{ $this-news-id=$id; $ret=$this-news-remove(State of Qatar; if($ret卡塔尔国 $this-flash(''删除成功'',

    别的有效的保留方法:

●savaFieldId($name,$value)

    ○保存二个单田野(field卡塔尔国的值

●getLastInsertID()

○再次来到方今创设记录的ID

 

1.4 Model的Callbacks

    在大家好像0.10.x最后版的时候,大家增添了一部分model的回调函数,允许客商能够逻辑上偷偷的在model操作前或操作后实践。为了在行使中得到这种方法,在model中动用提供的参数,重载上面包车型大巴那几个主意

●beforeFind($conditions)

○这一个回调函数在三个查询操作起来早前执行。将查询前的操作逻辑放到那几个措施里面。当你在model中重写(override)那一个格局时,当您想要find操作实施时候回来true,当你想要实践中止时候回来false

●afterFind($results)

○使用这些回调函数能够改进从find操作中回到的结果,恐怕完毕其余任何的find后逻辑。那几个函数的参数是model的find操作的结果,再次来到的是改良后的结果。

●beforeSave()

○在此个函数中放置任何保存前的逻辑。如若您像保存操作履行则赶回true,不然重返false

●afterSave()

    ○放置任何你想要在保存后奉行的代码在此个回调函数中

●beforeDelete()

    ○放置删除前的逻辑代码。想要删除操作实施则赶回true,不然再次回到false

●afterDelete()

    ○放置任何你想要在剔除后施行的代码在此个回调函数中

 

2. Model 变量

    当你成立你的models时候,你能够设置有些特有的变量,来得到对Cake函数的使用。

●$primaryKey

○借使这一个model关联到叁个数据库的table,何况数据库的主键并非id,那么使用这么些变量来报告Cake主键的名字

●$transactional

○告诉Cake该model是还是不是帮忙传输(比方begin/commit/rolback),设置为boolea值。

●$useTable

○固然您想利用的数据库的table而不是model名的复数情势,并且你也不想纠正table名,设置这几个变量为table名

●$validate

    ○确认传递给model的数量是或不是科学的二个数组。查看第十章

●$useDbConfig

○还记得数据库设置中,你能够在/app/config/database.php文件中设置么?使用那几个变量能够调换他们  

class CategoriesController extends AppController
{
    var $scaffold;
}

有关Scaffold,要注意一生死攸关的难题: Scaffold期望每种以_id结尾的filed name是三个外键並且针对贰个table,table的名称和_id前方的同样(只可是是小写的)。所以,譬释迦牟尼佛讲,如果您嵌套了归类,你最棒有个列叫做parent_id。在这里个本子中,最CANON够命名称叫parentid.同样,在表中有多个外键(比方,titles table有个category_id),何况你曾经特别的联结到models(查看6.2驾驭联结),在show/edit/newd的views中,选用的表将会和外键的表(category)一齐活动的变现出来(原来的小说:a select box will be automatically populated with the rows from the foreign table (category卡塔尔(قطر‎ in the show/edit/new views.)。在foreign model中安装$display菲尔德来支配foreign中如何田野会被彰显。继续我们的例子,category有个标题
class Title extends AppModel 
{
    var $displayField = ''title'';
}

第六章 Models

本章内容:

  1. Model Function

       1.1 客商定义的Function

       1.2 检索(retrieving卡塔尔你的数额

       1.3 保存你的多寡

       1.4 Model的回调(callbacks)

  1. Model的变量

  2. Associations

 

Model是怎样,它是MVC方式中的M

Model做些什么。它使得domain logic和presentation分隔开分离,独立application logic(It separates domain logic from the presentation, isolating application logic.卡塔尔(قطر‎

      

       四个Model概要的说正是三个针对数据库的access,更具体,正是数据库中的特定的table。暗许的,每一种model都施用自身名字复数情势的table,举个例子,User Mode使用 users

table。Models能够爱惜数据一定的法规,联结音信以致它利用的table的方式。

 

 

1. Model的方法

       从PHP的眼光看,models都以从AppModel类世袭来的类。类AppModel原始是概念在 /cake目录下。你也得以创造和煦的坐落于 app/app_model.php.这么些文件应该包括部分可供多少个models分享的方式。AppModel自个儿也是从Model类继承而来的,Model类是二个正式的Cake库,定义在 libs/model.php

       注意

       纵然本节介绍的是Model中常用的法门,可是记住:更详细的参照请到

 

1.1 顾客定义的艺术

       上面是model中二个一定table的事例,该例子实现了在blog中显得和藏身三种办法

例6.1  Example Model Functions

<?php
class Post extends AppModel
{
   function hide ($id=null)
   {
      if ($id) $this->setId($id);
      $this->set(''hidden'', ''1'');
      $this->save();
   }
 
   function unhide ($id=null)
   {
      if ($id) $this->setId($id);
      $this->set(''hidden'', ''0'');
      $this->save();
   }
}
?>

1.2 检索数据

上面是运用model取得数码的有的专门的学业方法

●findAll($conditions,$fields,$order,$limit,$page,$recursive)

○重回特定的田野s,田野s由$limit(私下认可是50State of Qatar个记录,相称$conditions(即便有State of Qatar,从第$page(暗许1卡塔尔页开首列表,$conditions内容应该像SQL语句中的相似,举个例子:$conditions=”race = ‘wookie’ AND thermal_detonators>3”

○当$recursive选项设置成1到3的整数,findAll(卡塔尔国将会试图再次来到在联合到该model中窥见的具备项的models.那项递归搜索能够浓重3层。

●find($conditions, $fields, $order, $recursive)

    ○重回相称$conditions的率先条记下的制订的田野同志s(若无一些名则赶回全体卡塔尔(قطر‎

    ○$recursive成效同上

●findAllBy<FieldName>($value) and findBy<FieldName>($value)

○那么些美妙的形式能够用来钦定特定的田野和特定的value快捷查找行,你要做的正是把您的田野用驼峰表明法增加在前面。比方(用于controller中)

$this->Post->findByTitle(''My First Blog Post'');
$this->Author->findByLastName(''Rogers'');
$this->Property->findAllByState(''AZ'');
$this->Specimen->findAllByKingdom(''Animalia'');

回去的结果是叁个数组,和find(卡塔尔以致findAll(State of Qatar再次来到的结果是三个样式

●field($name,$conditions,$order)

○依据$order排序,依据法规$conditions,将率先条记下中的田野先生值,作为string重回

●findCount($conditions)

    ○再次回到相配$conditions的笔录的个数

●generateList

($conditions=null,$order=null,$limit=null,$keyPath=null,$valuePath=null)

    ○依据models的lists,取得一层层key的值,极度是基于model list创造<select>list。$conditions, $order, $limit参数使用方法和上面相似。$keyPath和$valuePath是你告知model这里去找keys和values来成list。比方,基于Role model,你想生成一个由ids(类型integer卡塔尔国充当key,由roles当做value的list,那个措施调用情势如下:

$this->set(
    ''Roles'',
    $this->Role->generateList(null, ''role_name ASC'', null, ''id'', ''role_name'')
);

//This would return something like:
array(
    ''1'' => ''Account Manager'',
    ''2'' => ''Account Viewer'',
    ''3'' => ''System Manager'',
    ''4'' => ''Site Visitor''
);

●read($fields=null, $id=null)

    ○使用那些办法从近些日子装载的笔录或然由$id钦赐的笔录中拿走田野先生s和值

 

 

    特定的Sql调用能够使用model的findBySql(State of Qatar方法。举个例子,在blog应用中,作者想囤积贰个发贴者的first name到二个table中,不过那么些table实际不是自个儿的cake schema中的一有的。作者就可以通过那个model中的七个特定的艺术

 

例6.2 Custom Sql Calls With findBySql()

<?php
class Post extends AppModel
{
        function posterFirstName()
        {
          $ret = $this->findBySql("SELECT first_name FROM posters_table 
                                   WHERE poster_id = 1");
          $firstName = $ret[0][''first_name''];
          return $firstName;
        }
}
?>

自然也可以有query(State of Qatar方法,假使实行成功再次来到true,退步重回false。因为query语句而不是都回到结果集。譬如“DELETE FROM problems WHERE solved = true”

 

1.3 保存数据

    为了保留你的数目到model中,你应该向model提供您想要保存的数码。那个多少交到给save(卡塔尔方法应该以上面的款型保留

Array
(
    [modelname] => Array
        (
            [fieldname1] => value
            [fieldname2] => value
        )
)    

从form表单提交(post方法)的数据会自动排列成这种样式,况且放置到controller中的$this->params[‘data’],因而,通过web的form表单保存数据非常轻便。四个controller的编排方法只怕会像上边那样呈现:

function edit($id) 
{
   //Note: The property model is automatically loaded for us at $this->property.     
   // Check to see if we have form data 
   if (isset($this->params[''form''][''data''][''property''])) 
   {  
      // Here''s where we try to save our data
      if ($this->property->save($this->params[''data''])) 
      {
         //Show the user that her data has been saved
         $this->flash(''Your information has been saved.'',            
 ''/properties/edit/''.$this->params[''data''][''property''][''id''], 2);
         exit();
      }
      else
      {
         //If the data couldn''t be validated, show the validation errors
         //and repopulate form fields with submitted data
         $this->set(''form'', $this->params[''data'']);
         $this->validateErrors($this->property);
         $this->render();
      }      
   }   
   //If no form data was submitted, just render the edit view
   $this->render();
}

 

<

本文由美高梅4688官方网站发布于最新话题,转载请注明出处:美高梅4688官方网站web程序员憎恨创建以后可能根本用不到的forms,//使用news这个模型function index(){

您可能还会对下面的文章感兴趣: