cakephp 學習4

來源:互聯網
上載者:User
 

1 驗證用Regex
    <?php
class User extends AppModel
{
  var $name = 'User';

  var $validate = array(
    'username' => '/^.{6,40}$/',
    'password' => '/^.{6,40}$/',
    'email' => VALID_EMAIL
  );
}
?>
這個Regex的意思就是 “從字串的開頭開始,有至少 6 個但不超過 40 個字元,然後字串結束”。
從左至右閱讀這個Regex:

/ — 表示Regex的開頭
^ — 表示字串的開頭
. — 表示任意一個字元
{6,40} — 表示至少 6 次,但不能超過 40 次
$ — 表示字串結束
/ — 表示Regex結束

2 在資料進入資料庫前,先判斷是否重複輸入
在model層中輸入

function beforeValidate() {
    if (!$this->id) {
if ($this->findCount(array('User.username'
  => $this->data['User']['username'])) > 0) {
$this->invalidate('username_unique');
return false;
}
    }
    return true;
}
 並且在view層中給出資訊
    echo $form->input('username', array('after' => $form->error
       ('username_unique', 'The username is taken. Please try again.')));

 

   這個方法告訴模型,在運行任何檢驗之前,應該檢查提交的資料是否有 ID。如果沒有 ID,就尋找使用者名稱相同的其他使用者。如果

找到這樣的使用者,就將使用者名稱欄位標為無效,並跳過其他檢驗(返回 false)。通過將 register.ctp 視圖中的使用者名稱輸入行改為清

單 24 所示的代碼,就可以啟用這個功能。

2  用bake來產生架構
   注意必須建立好model層後再用!
 把cake\console以及php目錄底下的php.exe所在的路徑加到path中去。之後在app目錄下運行
cake bake即可一步步去做control層,view層的crud.

3
  一對多的例子:
  authors,books表中,一對多的關係
author.php中
   <?php
class Author extends AppModel
{
 var $name = 'Author';
var $hasMany = array ('Book' => array(
'className' => 'Book','foreignKey'=>'author_id')
    );
  }
?>
book.php表
  <?php
class Book extends AppModel
{ var $name = 'Book';
 var $belongsTo = array ('Author' => array(
'className' => 'Author','foreignKey'=>'author_id')
    );
}
?>
然後假設authors表中已有資料
books_controller.php:
 <?php
class BooksController extends AppController {
var $name = 'Books';
var $scaffold;
}
  其中在錄入book表時,應該會有authors的下拉框供選擇。

 一對多中,一方如果和多個多方有關聯,可以這樣寫:
  var $hasMany = array(
'Book' => array(
'className' => 'Book',
),
'Tutorial' => array(
'className' => 'Tutorial',
)
);

4 一對多的最終例子
   model層
   book.php:
     <?php
class Book extends AppModel
{ var $name = 'Book';
 var $belongsTo = array ('Author' => array(
'className' => 'Author','foreignKey'=>'author_id')
    );
}
?>
   author.php
    <?php
class Author extends AppModel
{
 var $name = 'Author';
var $hasMany = array ('Book' => array(
'className' => 'Book','foreignKey'=>'author_id')
    );
 
}
?>

  控制層 books_controller.php
     <?php
class BooksController extends AppController {
var $name = 'Books';
var $helpers = array('Form');
function index() {
$this->Book->recursive = 1;
$books = $this->Book->find('all',
array('fields' =>
array('Book.isbn','Book.title','Author.name')
)
);
$this->set('books',$books);
}
function add() {
if (!empty($this->data)) {
$this->Book->create();
$this->Book->save($this->data);
$this->redirect(array('action'=>'index'));
}
//注意在1.2中,不用helper類的generalist了。用find
$authors =$this->Book->Author->find('list',array('fields'=>'Author.name'));
$this->set('authors',$authors);
}
}
?>
    authors_controller.php
  <?php
class AuthorsController extends AppController {
var $name = 'Authors';
function index() {
$this->Author->recursive = 1;
$authors = $this->Author->find('all');
$this->set('authors', $authors);
}
}
?>
  view層
   views\authors\index.thtml
   <?php foreach($authors as $author): ?>
<h2><?php echo $author['Author']['name'] ?></h2>
<hr />
<h3>Book(s):</h3>
<ul>
<?php foreach($author['Book'] as $book): ?>
<li><?php echo $book['title'] ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>

    views\books\index.thtml
   <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['Author']['name'] ?></td>
</tr>
<?php endforeach; ?>
</table>

  views\books\add.thtml
   <?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_id');
?>
</fieldset>
<?php echo $form->end('Submit');?>

5 一對多中,刪除一方時,如果要串聯刪除多方,這樣設定
  var $hasMany = array(
'Book' => array(
'className' => 'Book',
'dependent'=> true
)
);

6 多對多,假設book和author關係為多對多
   model層
    book.php
   <?php
class Book extends AppModel
{
var $name = 'Book';
var $hasAndBelongsToMany = 'Author';
}
?>
    author.php
  <?php
class Author extends AppModel
{
var $name = 'Author';
var $hasAndBelongsToMany = 'Book';
}
?>

 controll層
  books_controller.php
    <?php
class BooksController extends AppController {
var $name = 'Books';
var $helpers = array( 'Form' );
function index() {
$this->Book->recursive = 1;
$books = $this->Book->find('all');
$this->set('books', $books);
}
function add() {
if (!empty($this->data)) {
$this->Book->create();
$this->Book->save($this->data);
$this->redirect(array('action'=>'index'), null, true);
}
$authors =$this->Book->Author->find('list',array('fields'=>'Author.name'));
$this->set('authors', $authors);
}
}
?>
   authors_controller.php
     <?php
class AuthorsController extends AppController {
var $name = 'Authors';
function index() {
$this->Author->recursive = 1;
$authors = $this->Author->find('all');
$this->set('authors', $authors);
}
}
?>

 view層
  view\book\index.thtml
   <?php foreach($books as $book): ?>
<h2><?php echo $book['Book']['title'] ?></h2>
<hr />
<h3>Author(s):</h3>
<ul>
<?php foreach($book['Author'] as $author): ?>
<li><?php echo $author['name'] ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>

   view\author\index.thtml
  <?php foreach($authors as $author): ?>
<h2><?php echo $author['Author']['name'] ?></h2>
<hr />
<h3>Book(s):</h3>
<ul>
<?php foreach($author['Book'] as $book): ?>
<li><?php echo $book['title'] ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>

  view\books\add.thtml
  <?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');
?>
</fieldset>
<?php echo $form->end('Submit');?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.