백엔드 개발 PHP 튜토리얼 CakePHP您必须知道的21条技巧

CakePHP您必须知道的21条技巧

Jun 13, 2016 am 11:03 AM
action cakephp controller gt model

CakePHP你必须知道的21条技巧

原文链接:http://www.avatarfinancial.com/pages/cake/

这篇文章可以说是CakePHP教程中最经典的了。虽然不是完整的手把手系列, 但作者将自己使用CakePHP的经验总结了21条,这些尤其是对新手十分有用。

翻译时故意保留了一些CakePHP中特有的词语没有翻译, 如controller、model等。相信学过CakePHP的人应该马上就能理解它们的意思吧。

另外,CakePHP的wiki已经失效,取而代之的是一个名为bakery的网站。 原文中引用的wiki的链接也都已更新到了bakery上。

快速创建静态页面

我想建立几个页面,它们仅包含静态数据,使用默认layout,不需要任何model。 最初我试图创建一个controller并为每个静态页面定义一个action。 但这种方法很笨拙,也不适合快速创建静态页面。

实际上只要使用pages controller就可以做到——只要在 views/pages 文件夹下创建一个 view,就可以通过 /pages 来访问。例如,我创建了 /views/pages/matt.thtml , 就可以通过 http://www.example.com/pages/matt 来访问。

?

改变静态页面的标题

使用pages controller时如果想改变页面标题,只需在view中加入以下代码:

 $this->pageTitle = 'Title of your page.'; ?>
로그인 후 복사

?

在静态页面中向layout发送数据

如果需要向layout传递数据(例如表示导航栏中哪个部分应该高亮显示的变量), 可以在view中添加下面的代码:

 $this->_viewVars['somedata'] = array('some','data'); ?>
로그인 후 복사
?

这个数组就可以在layout中通过$somedata来访问。

?

快速创建后台管理

如果你需要创建后台管理程序,并且希望所有管理action都位于某个特定文件夹下, 那么打开 config/core.php 并将下面这一行的注释去掉:

define('CAKE_ADMIN', 'admin');
로그인 후 복사

?

这样所有以”admin“开头的action都可以通过 /admin/yourcontroller/youraction 来访问。 例如,如果在posts controller中创建了名为”adminadd”的action, 那么可以通过 www.example.com/admin/posts/add 访问这个action。 这样就可以方便地为admin目录设置密码以避免他人随意访问。

?

查看后台执行的SQL语句

只需改变config/core.php中的DEBUG常量,即可看到后台执行的SQL语句。 0为产品级,1为开发级,2为完整调试SQL,3为完整调试SQL并显示对象数据。 我通常将DEBUG设置为2,这样每页的底部会显示出一个包含SQL调试信息的表格。

如果页面底部添加的表格会破坏页面布局(特别是使用Ajax获取页面并显示到页面中间而不是底部时), 你可以在CSS中添加以下代码以隐藏调试信息:

#cakeSqlLog { display: none; }
로그인 후 복사
?

这样既能保持页面布局,又可以通过查看源代码来看到调试信息。 当然最后发布网站时别忘了将调试级别改回0。

?

获取丰富的开发文档

别总是盯着手册。wiki和API也是无价之宝。wiki中的开发指南十分有用,而API文档初看起来比较难, 但你很快就会发现这里的信息对你创建CakePHP网站十分重要。

?

使用bake.php

Bake是个命令行PHP脚本,可以根据数据库自动生成model、controller和view。 在开发的最初阶段,我强烈推荐使用scaffolding让你的原型程序跑起来。 但如果你清楚地知道scaffolding不合适,我推荐你使用bake。 bake会生成所有的文件并保存到磁盘上,以便你随意修改。 这样能节省创建关联、view、基本的CRUD crollder操作的重复工作。

(译者注:CRUD – Create, Read, Update, Delete,数据库应用的四种基本操作,即”增删查改”。)

bake很方便。你只需在数据库中建立一个表,然后到 /cake/scripts/ 目录下执行 php bake.php 即可。

如果你通过交互方式来运行bake,它会分几步提示你创建model、controller和view。 创建结束之后,我通常会阅读所有生成的代码并做必要的修改。

?

发布程序时注意权限

有一次我在发布程序时,将整个cake目录打包然后用scp上传到了服务器上。 只要一关闭调试信息,就会出现错误——数据库调用无法返回任何数据。 我一筹莫展,因为我必须通过调试信息才能调试问题。 后来有人告诉我,/app/tmp应当对apache可写。将权限改为777之后问题就解决了。

?

复杂model验证

我需要进行更复杂的验证,而不仅仅是验证输入框非空或者符合某个正则表达式这样的简单验证。 例如,我要验证用户注册时使用的邮件地址是否已被使用。在wiki中我找到了这篇 关于高级验证的文章, 其中提到了一些十分有用的高级验证方法。

?

记录错误日志

$this->log('Something broke');
로그인 후 복사
?

这样可以将错误记录到 /tmp/logs/ 中(我最初以为会记录到apache的错误日志中)。

?

让controller使用其他model

如果你的controller需要调用来自不同model的数据,只要在controller开头使用如下代码:

class yourController extends AppController {  var $uses = array('Post','User');}
로그인 후 복사
?

这样controller就能访问Post和User model了。

?

创建不使用数据库表的model

我需要创建一个不使用任何表的model。例如,我想通过$validate数组方便底验证输入数据, 保持model逻辑的正确性。但创建model时对应的表不存在,CakePHP就会报错。 通过在model中加入以下代码可以解决这个问题:

var $useTable = false;
로그인 후 복사
?

你也可以通过这种方法改变model对应的表名。

var $useTable = 'some_table';
로그인 후 복사
?

重定向之后记得exit()

对于有经验的人来说这应当是理所当然的事儿,调用 $this->redirect() 之后,剩下的代码如果不想运行 要exit()。我也这样做,但以前曾经认为 $this->redirect() 会为我调用exit(实际上不会)。

?

高级model函数

翻翻API就能发现很多你不知道的非常有用的函数。 我强烈推荐至少阅读一遍 Model 类的参考手册。 下面是以前我没注意到的几个重要函数:

??? generateList() – 主要用于生成选择框(

?

如何正确插入多行

我需要遍历一个列表,并将其中的每个元素都插入到数据库中。 我发现如果在一次插入完成后立即进行下一次插入, 那么第二次插入的内容完全不会被插入,而是会被更新到第一次插入的行中。 例如:

$items = array('Item 1','Item 2','Item 3');foreach ($items as $item) {  $this->Post->save(array('Post' => array('title' => $item)));} 
로그인 후 복사
?

这段代码将在posts表中插入仅一行:“Item 3”。 CakePHP首先插入“Item 1”,但马上将其更新为“Item 2”, 再更新为“Item 3”,因为$this->Post->id保存的是上一次插入成功的行的id。 通常这个特性很有用,但在这个例子中反而帮了倒忙。 其实只要在每次插入之后设置 $this->Post->id = false 就可以解决这个问题。

更新:有人发邮件告诉我,正确的做法是调用create()初始化model,再set/save新数据。

?

在controller函数之前或之后插入逻辑

假设你需要在controller渲染的每个view中都设置一个颜色数组, 但你不希望在每个action中都定义它。可以通过 beforeRender() 回调函数来实现:

function beforeRender() {  $this->set('colors',array('red','blue','green');}
로그인 후 복사
?

这样该controller渲染的所有view都可以访问$colors变量。 beforeRender() 函数在controller逻辑结束后、view被渲染之前执行。同样, beforeFilter() 和afterFilter() 函数会在每个controller action执行的前后执行。 更多信息请阅读手册的models一节。

?

为CakePHP添加所见即所得编辑器

这里有一篇非常好的教程教你如何在 CakePHP中使用TinyMCE。基本上你只需在页面上链接tiny_mce.js文件,然后添加一些初始化代码以设置 将哪个textarea变成TinyMCE编辑器即可。

?

自定义HABTM关系的SQL语句

我曾试图在自定义的SQL语句上定义一个HABTM关系(has-and-belongs-to-many),却遇到了问题。 根据本文撰稿时的文档,应当先在自己的model中设置finderSql,但从CakePHP的源代码来看, 应该设置finderQuery。这只是文档中的一个小问题,但指出问题却能为他人节约时间。 Trac ticket在这里。

?

发送邮件

我在wiki中找到两篇教程:发送邮件和通过PHPMailer发送邮件。 强烈推荐后者,通过PHPMailer发送邮件更安全,而且不需要自己处理邮件头,减少许多麻烦。

?

自定义Helper生成的HTML

我需要修改调用$html->selectTag()时生成的

; Tag template for a input type='radio' tag.radio = "<input type="radio" name="data[%s][%s]" id="%s"><label for="%3$s">%s</label>"; Tag template for an empty select option tag.selectempty = "<option value="">-- Please Select --</option>"
로그인 후 복사
?

你可以从/cake/config/tags.ini.php中获得完整的标签列表。但我不建议修改该文件, 否则升级CakePHP时可能会让你的修改丢失。


自定义404页面

如果你需要自定义404页面,只需创建 /app/views/errors/error404.thtml。

?

?

来源: http://tech.idv2.com/2007/10/19/21-tips-you-must-know-about-cakephp/

?

?

?

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

화웨이 GT3 Pro와 GT4의 차이점은 무엇입니까? 화웨이 GT3 Pro와 GT4의 차이점은 무엇입니까? Dec 29, 2023 pm 02:27 PM

많은 사용자들이 스마트 시계를 선택할 때 Huawei 브랜드를 선택하게 됩니다. 그 중 Huawei GT3pro와 GT4가 가장 인기 있는 선택입니다. 두 제품의 차이점을 궁금해하는 사용자가 많습니다. Huawei GT3pro와 GT4의 차이점은 무엇입니까? 1. 외관 GT4: 46mm와 41mm, 재질은 유리 거울 + 스테인레스 스틸 본체 + 고해상도 섬유 후면 쉘입니다. GT3pro: 46.6mm 및 42.9mm, 재질은 사파이어 유리 + 티타늄 본체/세라믹 본체 + 세라믹 백 쉘입니다. 2. 건강한 GT4: 최신 Huawei Truseen5.5+ 알고리즘을 사용하면 결과가 더 정확해집니다. GT3pro: ECG 심전도, 혈관 및 안전성 추가

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

수정: Windows 11에서 캡처 도구가 작동하지 않음 수정: Windows 11에서 캡처 도구가 작동하지 않음 Aug 24, 2023 am 09:48 AM

Windows 11에서 캡처 도구가 작동하지 않는 이유 문제의 근본 원인을 이해하면 올바른 솔루션을 찾는 데 도움이 될 수 있습니다. 캡처 도구가 제대로 작동하지 않는 주요 이유는 다음과 같습니다. 초점 도우미가 켜져 있습니다. 이렇게 하면 캡처 도구가 열리지 않습니다. 손상된 응용 프로그램: 캡처 도구가 실행 시 충돌하는 경우 응용 프로그램이 손상되었을 수 있습니다. 오래된 그래픽 드라이버: 호환되지 않는 드라이버가 캡처 도구를 방해할 수 있습니다. 다른 응용 프로그램의 간섭: 실행 중인 다른 응용 프로그램이 캡처 도구와 충돌할 수 있습니다. 인증서가 만료되었습니다. 업그레이드 프로세스 중 오류로 인해 이 문제가 발생할 수 있습니다. 이 문제는 대부분의 사용자에게 적합하며 특별한 기술 지식이 필요하지 않습니다. 1. Windows 및 Microsoft Store 앱 업데이트

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP는 파일 업로드를 어떻게 처리합니까? CakePHP는 파일 업로드를 어떻게 처리합니까? Jun 04, 2023 pm 07:21 PM

CakePHP는 웹 애플리케이션의 개발 프로세스를 단순화하는 PHP 언어를 기반으로 구축된 오픈 소스 웹 애플리케이션 프레임워크입니다. CakePHP에서는 파일 업로드 처리가 일반적인 요구 사항입니다. 아바타, 사진 또는 문서를 업로드하든 해당 기능을 프로그램에서 구현해야 합니다. 이번 글에서는 CakePHP에서 파일 업로드를 처리하는 방법과 주의사항을 소개합니다. Controller에서 업로드된 파일 처리하기 CakePHP에서 업로드된 파일은 일반적으로 Cont에서 처리됩니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP와 함께 Twig를 사용하는 방법은 무엇입니까? CakePHP와 함께 Twig를 사용하는 방법은 무엇입니까? Jun 05, 2023 pm 07:51 PM

CakePHP에서 Twig를 사용하는 것은 템플릿과 뷰를 분리하여 코드를 보다 모듈화하고 유지 관리하기 쉽게 만드는 방법입니다. 이 기사에서는 CakePHP에서 Twig를 사용하는 방법을 소개합니다. 1. Twig 설치 먼저 프로젝트에 Twig 라이브러리를 설치하여 이 작업을 완료할 수 있습니다. 콘솔에서 다음 명령을 실행하세요: Composerrequire "twig/twig:^2.0" 이 명령은 프로젝트 공급업체에 표시됩니다.

See all articles