> 백엔드 개발 > PHP 튜토리얼 > cakephp 지식 포인트 요약

cakephp 지식 포인트 요약

高洛峰
풀어 주다: 2023-03-06 07:04:01
원래의
1256명이 탐색했습니다.

이 글의 예시는 cakephp의 상식적인 내용을 요약한 것입니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

1. 다른 컨트롤러의 템플릿을 호출하고

방법 1:

여기 /views/tasks/tasks에서 hello.ctp 템플릿을 호출하세요

$this -> viewPath = 'tasks';
$this -> render('hello');
로그인 후 복사

방법 2(매개변수 포함):

$this ->redirect(array('controller'=>'users','action'=>'환영합니다',urlencode($this->data['name'].'haha')));

2. sql을 사용하여

직접 쿼리:

$this->PostContent->query("select * from user");
find():
$clue = $this->clue->find('all',
  array(
    'fields' =>array(
      'id',
      'title',
      'content'
    ),
    'order' => 'id ASC',
    'conditions' => array('id' => '1'),
  )
);
로그인 후 복사

매개변수 찾기, 첫 번째 can 그것은 all, first, count입니다. 두 번째 매개변수는 배열입니다. 배열의 키는 조건, 필드, 순서, 제한, 오프셋 및 조인일 수 있습니다.

추가:

$this->clue->create();
$this->clue->save($this->data);
로그인 후 복사
로그인 후 복사

수정:

$this->clue->create();
$this->clue->save($this->data);
로그인 후 복사
로그인 후 복사

삭제:

$this->clue->delete($id)
로그인 후 복사

3. Public 스타일이 필요하지 않은 경우

$this->layout = false;
로그인 후 복사

뷰를 렌더링할 필요 없음

$this->autoRender = false;
로그인 후 복사

4. 공용 메소드/클래스 정의

방법 1:

/app/Controller/AppController.php에서 공개 메소드

를 정의하여

$this->test();
로그인 후 복사

메소드 2를 호출할 수 있습니다. 🎜>

/app/controllers/comComponents에 UtillComponent.php 만들기

<?php
  class UtillComponent extends Object
  {
   function juanstr ($str) {
     return $str.&#39;+juanstr&#39;;
   }
  }
?>
로그인 후 복사

전화:

var $components = array(&#39;Utill&#39;);
$digit1 = $this->Utill->juanstr($digit1);
로그인 후 복사

5. 프롬프트 메시지 정의

$this->Session->setFlash(__(&#39;The user has been saved&#39;));

<p class="wrong"><?php echo $this->Session->flash();?></p>
로그인 후 복사

또는

$this->Session->write(&#39;Message.auth&#39;,array(&#39;message&#39;=>__(&#39;The user has been saved.&#39;,true),&#39;element&#39;=>&#39;&#39;,&#39;params&#39;=>array()));

<p class="wrong"><?php echo $this->Session->flash(&#39;auth&#39;);?></p>
로그인 후 복사

6. 세션 설정

//m.sbmmt.com/

check(string $name);

세션에 키 값으로 $name을 갖는 데이터 항목이 이미 있는지 확인합니다.

del(string $name);<p>delete(string $name);</code ><code>del(string $name);<br/>delete(string $name);

$name으로 지정된 세션 변수를 삭제합니다.

valid는 세션이 유효할 때 true를 반환합니다. 액세스하려는 세션이 실제로 유효한지 확인하려면 read() 작업 전에 이를 사용하는 것이 가장 좋습니다.

read(string $name);

$name 변수 값을 반환합니다.

갱신

새 세션 ID를 생성하고 원래 ID를 삭제하여 원래 세션의 정보를 새 세션으로 업데이트합니다.

write(string $name, mixed $value);

$name, $value 변수를 세션에 씁니다.

error

Cake 세션 구성 요소에서 생성된 가장 최근 오류를 반환합니다. 일반적으로 디버깅에 사용됩니다.

7.양식

<?php echo $this->Form->create(&#39;Subject&#39;,array(
  &#39;type&#39; => &#39;post&#39;,
  &#39;inputDefaults&#39;=>array(
    &#39;p&#39;=>false,
    &#39;label&#39;=>false
    ),
  &#39;url&#39;=>array(
      &#39;controller&#39;=>&#39;subjects&#39;,
      &#39;action&#39;=>&#39;edit&#39;
    ),
  &#39;onsubmit&#39;=>&#39;return validateCallback(this, dialogAjaxDone);&#39; //提交前验证
  )
);
echo $this->Form->input(&#39;id&#39;,array(&#39;type&#39;=>&#39;hidden&#39;));
echo $this->Form->input(&#39;uid&#39;,array(&#39;type&#39;=>&#39;hidden&#39;));
?>
<ul class="usr_info_basic">
<li>
  <p class="ti">下拉单选(编辑页面会自动判断选中)</p>
  <p class="ce">
<?php echo $this->Form->input(&#39;type&#39;,array(&#39;type&#39;=>&#39;select&#39; ,&#39;class&#39;=>&#39;ipt&#39;,&#39;options&#39; => array(0=>&#39;文章&#39;,1=>&#39;专题&#39;, 2=>&#39;图组&#39;)));?>
  </p>
</li>
<li>
  <p class="ti">多选</p>
  <p class="ce">
<?php
  echo $this->Form->input(&#39;pushtype&#39;, array(&#39;type&#39;=>&#39;select&#39;,
    &#39;options&#39; => $pushtype,//所有选项
    &#39;multiple&#39;=>&#39;checkbox&#39;,
    &#39;selected&#39; => $pushtypes,//选中的项
));
?>
  </p>
</li>
</ul>
<p class="btns_3">
  <button class="btn3" type="submit"><span>保存</span></button>
  <button class="btn3 btn3_1 close"><span>取消</span></button>
</p>
<?php echo $this->Form->end();?>
로그인 후 복사

8.로그 $this->log();

컨트롤러에서 직접 호출:

$this->log(&#39;Something brok2&#39;,LOG_DEBUG);
로그인 후 복사

또는 뷰에서 호출:

로그인 후 복사

로그 종류는 대략 다음과 같습니다.

$levels = array(
  LOG_WARNING=> &#39;warning&#39;,
  LOG_NOTICE=> &#39;notice&#39;,
  LOG_INFO=> &#39;info&#39;,
  LOG_DEBUG=> &#39;debug&#39;,
  LOG_ERR=> &#39;error&#39;,
  LOG_ERROR=> &#39;error&#39;
);
로그인 후 복사

로그 파일은 /app/tmp/logs 디렉터리에 저장됩니다.

/app/config/core.php 파일에 로그 구성 옵션이 있습니다:

define(&#39;LOG_ERROR&#39;, 2);
로그인 후 복사

9. 🎜>

echo APP . &#39;webroot&#39; . DS;
//D:\wamp\www\cakephp\app\webroot\
echo APP . &#39;webroot&#39; ;
D:\wamp\www\cakephp\app\webroot
로그인 후 복사

첨부: CakePHP에 대해 알아야 할 21가지 팁

이 기사는 CakePHP 튜토리얼 그중 가장 고전적인 튜토리얼입니다. 완전한 단계별 시리즈는 아니지만, 저자가 CakePHP를 사용하면서 겪은 자신의 경험을 21개 항목으로 요약했는데, 이는 특히 초보자에게 매우 유용합니다.

번역 과정에서 컨트롤러, 모델 등 CakePHP 고유의 일부 단어를 의도적으로 번역하지 않은 채 남겨 두었습니다. 저는 CakePHP를 배운 사람들이라면 그 의미를 즉시 이해할 수 있을 것이라고 믿습니다.

또한, CakePHP의 위키가 만료되어 Bakery라는 웹사이트로 대체되었습니다. 원본 기사에 인용된 위키 링크도 베이커리로 업데이트되었습니다.

정적 페이지를 빠르게 생성

정적 데이터만 포함하고 기본 레이아웃을 사용하며 모델이 필요하지 않은 여러 페이지를 생성하고 싶습니다. 처음에는 컨트롤러를 만들고 각 정적 페이지에 대한 작업을 정의하려고 했습니다. 그러나 이 방법은 서툴고 정적 페이지를 빠르게 생성하는 데 적합하지 않습니다.

실제로 페이지 컨트롤러를 사용하여 이를 수행할 수 있습니다. views/pages 폴더 아래에 보기를 만들고 /pages를 통해 액세스하면 됩니다. 예를 들어, //m.sbmmt.com/을 통해 액세스할 수 있는 /views/pages/matt.thtml을 만들었습니다.

정적 페이지 제목 변경

페이지 컨트롤러를 사용할 때 페이지 제목을 변경하려면 뷰에 다음 코드를 추가하세요.

<? $this->pageTitle = &#39;Title of your page.&#39;; ?>
로그인 후 복사

정적 페이지의 레이아웃에 데이터 보내기

레이아웃에 데이터를 전달해야 하는 경우(예: 탐색 모음의 어느 부분이 변수로 강조 표시되어야 하는지) 다음 코드를 뷰에 추가할 수 있습니다.

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

이 배열은 $somedata를 통해 액세스할 수 있습니다. 레이아웃.

빠른 백그라운드 관리 생성

백그라운드 관리 프로그램을 생성해야 하고 모든 관리 작업을 특정 폴더에 저장하려면 config/core를 엽니다. php를 열고 다음 줄에서 주석을 제거하세요:

define(&#39;CAKE_ADMIN&#39;, &#39;admin&#39;);
로그인 후 복사

这样所有以"admin_"开头的action都可以通过 /admin/yourcontroller/youraction 来访问。例如,如果在posts controller中创建了名为"admin_add"的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(&#39;Something broke&#39;);
로그인 후 복사

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

让controller使用其他model

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

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

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

创建不使用数据库表的model

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

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

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

var $useTable = &#39;some_table&#39;;
로그인 후 복사

重定向之后记得exit()

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

高级model函数

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

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