cakephp实例
基本的配置:
数据库设置 我这里使用的是数据库news
apache : rewrite module 打开
我这里是设置好一个虚拟主机指向到www/app,如果是虚拟目录方式,查看相关文档。
新建news表 里面的字段 id,title,content,time,sort
因为一定要操作news这个表,所以先建立news的model
/app/models/news.php
<?
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/'');
else
$this->flash(''添加成功'',''/news/'');
}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();
if($ret)
$this->flash(''删除成功'',
第五章 Scaffolding (脚手架?)
Scaffolding是一个很棒的途径,使得早期开发的部分web应用能够运行起来。早期的数据库模式是不稳定的,很容易变化。Scaffolding有个下降趋势:web程序员憎恨创建以后可能根本用不到的forms。为了减少程序员的这种重复劳动, Cake中包含了Scaffolding。Scaffolding分析数据库,创建一些标准的使用add、delete、和edit按钮的lists,创建输入的forms,以及查看数据库中一个item的标准views。为了在程序中的controller中添加Scaffolding,需要添加$scaffold变量:
注意save操作是如何放置在一个条件语句中:如果你试图保存数据到model中,cake自动尝试确数据正确(根据你提供的规则)。可以查看第十章了解更多关于正确规则(validation).如果不想查看正确性直接保存数据,使用save($data,false);
其他有用的保存方法:
●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文件中设置么?使用这个变量可以交换他们
第六章 Models 本章内容: 1. Model Function 1.1 用户定义的Function 1.2 检索(retrieving)你的数据 1.3 保存你的数据 1.4 Model的回调(callbacks) 2. Model的变量 3. 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中常用的方法,然而记住:更详细的参考请到http://api.cakephp.org 1.1 用户定义的方法 下面是model中一个特定table的例子,该例子实现了在blog中显示和隐藏两种方法 例6.1 Example Model Functions 1.2 检索数据 下面是使用model得到数据的一些标准方法 ●findAll($conditions,$fields,$order,$limit,$page,$recursive) ○返回特定的fields,fields由$limit(默认是50)个记录,匹配$conditions(如果有),从第$page(默认1)页开始列表,$conditions内容应该像SQL语句中的一样,比如:$conditions=”race = ‘wookie’ AND thermal_detonators> ○当$recursive选项设置成1到3的整数,findAll()将会试图返回在联结到该model中发现的所有项的models.这项递归寻找可以深入3层。 ●find($conditions, $fields, $order, $recursive) ○返回匹配$conditions的第一条记录的制定的fields(如果没有指定则返回全部) ○$recursive作用同上 ●findAllBy<FieldName>($value) and findBy<FieldName>($value) ○这些奇妙的方法可以用于指定特定的field和特定的value快速查找行,你要做的就是把你的field用驼峰表达法添加在后面。举个例子(用于controller中) 返回的结果是一个数组,和find()以及findAll()返回的结果是一个形式 ●field($name,$conditions,$order) ○根据$order排序,根据条件$conditions,将第一条记录中的field值,作为string返回 ●findCount($conditions) ○返回匹配$conditions的记录的个数 ●generateList ($conditions=null,$order=null,$limit=null,$keyPath=null,$valuePath=null) ●read($fields=null, $id=null) ○使用这个方法从当前装载的记录或者由$id指定的记录中得到fields和值 特定的Sql调用可以使用model的findBySql()方法。举例,在blog应用中,我想存储一个发贴者的first name到一个table中,但是这个table并不是我的cake schema中的一部分。我就可以通过这个model中的一个特定的方法 例6.2 Custom Sql Calls With findBySql() 当然也有query()方法,如果执行成功返回true,失败返回false。因为query语句并不是都返回结果集。比如“DELETE FROM problems WHERE solved = true” 1.3 保存数据 为了保存你的数据到model中,你应该向model提供你想要保存的数据。这些数据提交给save()方法应该以下面的形式保存 从form表单提交(post方法)的数据会自动排列成这种形式,并且放置到controller中的$this->params[‘data’],因此,通过web的form表单保存数据非常简单。一个controller的编辑方法可能会像下面这样显示:
class CategoriesController extends AppController
{
var $scaffold;
}
有关Scaffold,要注意一个重要的问题: Scaffold期望每个以_id结尾的filed name是一个外键并且指向一个table,table的名称和_id前方的一样(只不过是小写的)。所以,举个例子来说,如果你嵌套了分类,你最好有个列叫做parent_id。在这个版本中,最好能够命名为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中设置$displayField来决定foreign中哪些field会被显示。继续我们的例子,category有个标题
class Title extends AppModel
{
var $displayField = ''title'';
}
<?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();
}
}
?>
$this->Post->findByTitle(''My First Blog Post'');
$this->Author->findByLastName(''Rogers'');
$this->Property->findAllByState(''AZ'');
$this->Specimen->findAllByKingdom(''Animalia'');
$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''
);
<?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;
}
}
?>
Array
(
[modelname] => Array
(
[fieldname1] => value
[fieldname2] => value
)
)
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();
}
PHP 尽管提供了大量有用的函数,但是在特殊情况下还可能需要进行扩展编程,比如大量的 PECL(PHP Extension Community Library)就是以扩展的形式提供的(动态链接库dll文件),它们比 PEAR 的运行效率要高很多。
PHP 扩展是用 C 或 C++ 编写的,需要编译成动态连接库 dll 文件后在 PHP 环境下注册后才能使用。
编写 PHP 扩展的软件要求:
VC++6.0 或 VC++.NET 环境。
PHP 的源代码,需要编译。
如果不愿意编译 PHP 的源代码,可以再下载 PHP 的已经编译成功的二进制代码(就是我们部署 PHP 运行环境的那些文件包)。注意分别下载的源文件包和已编译包,它们的版本必须一致。
过程:
1,安装 VC++6.0,并选择把其可执行文件路径加入环境变量中,使在命令行环境任意路径下可以运行编译器。
2,安装 PHP 运行环境,并与 IIS 正确集成在一起。假设使用的 PHP 版本为 5.2.5,下载 php-5.2.5-Win32.zip 二进制包和 php-5.2.5.tar.gz 源代码包。安装环境为 C:php-5.2.5-Win32。分别把源代码包和二进制包解压到该文件夹下。从 php.ini-recommended 拷贝生成一个 php.ini 文件。
3,建立 C:php-5.2.5-Win32Release_TS 文件夹,拷贝 C:php-5.2.5-Win32devphp5ts.lib 文件到这里。
4,进入 C:php-5.2.5-Win32ext 文件夹,运行命令:
C:php-5.2.5-Win32ext>..php.exe ext_skel_win32.php --extname=myphpext
Creating directory myphpext
Creating basic files: config.m4 config.w32 .cvsignore myphpext.c php_myphpext.h
CREDITS EXPERIMENTAL tests/001.phpt myphpext.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/myphpext/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-myphpext
5. $ make
6. $ ./php -f ext/myphpext/myphpext.php
7. $ vi ext/myphpext/myphpext.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/myphpext/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
<?php
得到PHP中最后一个字符
$str = " JhlIsHero ";
$var = trim($str);
$len = strlen($var)-1;
echo $var{$len};
?>
得到PHP一个字符串的最后一个字符
是不是PHP也和C一样,用一组连续地址来存储字符串呢......
From: http://hi.baidu.com/kakuma/blog/item/940e911ea4fd9e1c413417d2.html
1、int filesize(string filename),获取文件的大小。对于2~4GB之间的文件,可以使用sprintf("%u",filesize($file))来处理
2、bool unlink(string filename) ,删除一个文件
3、bool rmdir(string dirname) ,删除一个目录
4、bool mkdir(string pathname [,int mode]) ,新建一个由lpathname指定的目录,mode是指操作权限,默认为0777,表示最大可能的访问权限
5、string basename(string path [,string suffix]) ,path参数给出一个文件的全路径字符串,函数返回基本的文件名。如文件名以suffix结束,则去掉这部分
6、string dirname(string path) ,返回路径中的目录部分。
7、array pathinfo(string path) ,返回文件路径的信息,包含以下的数组单元dirname,basename,extension.
8、string realpath(string path) ,返回规范化的绝对路径名
9、bool copy( string source ,string dest) ,将文件从source复制到dest
例:copy("hello.txt","temp.php");
10、float disk_free_space(string directory ) ,返回目录中的可用空间
例:$df = disk_free_space("F:/");
echo $df.''<br>'';
相关文章
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
- 今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
- 主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php?id=1 表示我要访问的是帖子...2015-11-24
- 这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
- 一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
- 这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
- 经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
- 这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
- 这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
- 这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
- 这篇文章主要介绍了jQuery+PHP+MySQL实现无限级联效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-02-21