---
# System prepended metadata

title: CakePHP 2.4.3 learning

---

# CakePHP 2.4.3 learning

## Controller
### Set
Set biến truyền qua view ở Controller
```php=
$data = array(
'color' => 'pink',
'type' => 'sugar',
'base_price' => 23.95
);

// make $color, $type, and $base_price
// available to the view:

$this->set($data);
```
Bên view sử dụng
```htmlmixed=
You have selected <?php echo $color; ?> icing for the cake.
```

### Render
Mặc định Cake render theo tên controller và function, có thể tuỳ chỉnh render bằng cách

```php=
// Render the element in /View/Elements/ajaxreturn.ctp
$this->render('/Elements/ajaxreturn');
```

Nếu chỉ muốn chỉ định file cùng thư mục thì chỉ cần truyền tên file trong thư mục đó, ví dụ PostsController
```php=
// Render the element in /View/Posts/custom_page.ctp
$this->render('custom_page');
```

### Flash session

```php=
$this->Session->setFlash(__('Your post has been saved.'));
```

### Redirect
Có thể redirect tới function controller
```php=
public function place_order() {
    return $this->redirect(
        array('controller' => 'orders', 'action' => 'confirm')
    );
}
```
Redirect tới url
```php=
$this->redirect('/orders/thanks');
$this->redirect('http://www.example.com');
```

Redirect tới function ngay trong controller của nó
```php=
$this->redirect(array('action' => 'edit', $id));
```

### Load Model
Dùng để gọi một model mà nó không liên quan tới controller đó, gọi trong từng function.
```php=
$this->loadModel('Article');
$recentArticles = $this->Article->find(
    'count',
    array('limit' => 5, 'order' => 'Article.created DESC')
);
```
Load cho toàn bộ controller
```php=
// đầu file
App::uses('Article', 'Model');

// trong function sử dụng
$articleModel = new Article();
$totalArticle = $articleModel->find('count');
```

### Request
Những cách lấy parameters từ request
```php=
$this->request->controller;
$this->request['controller'];
$this->request->params['controller'];
```
Lấy Querystring parameters
```php=
// URL is /posts/index?page=1&sort=title
$this->request->query['page'];
```

Đối với request là kiểu Post
```php=
// An input with a name attribute equal to 'data[MyModel][title]'
// is accessible at
$this->request->data['MyModel']['title'];
```

Kiểm tra request
```php=
$this->request->is('post');
```

## View
### Layouts
Trong controller set layout cho view, ví dụ tạo một layout tại `app/View/Layouts/Common/base.ctp`
Trong Controller ở function index gọi.
```php=
public function index() {
    $this->layout = 'Common/base';
}
```

### Include elements
Khi muốn tách các element trong layouts để dùng chung, ví dụ `sidebar`, `nav`....v...v...
Ví dụ: tạo 1 file element tại `app/View/Elements/Common/sidebar.ctp` lúc này trong file `base.ctp` ta gọi:
```php=
<?php echo $this->element('Common/sidebar');?>
```

### Extending views
Tương tự Laravel, CakePHP cũng có chế độ Extend, ngoài `start` có thể dùng thêm `append`,`assign`,`prepend`
Ví dụ trang `base.php`
```htmlmixed=
// app/View/Layouts/base.ctp
<h1><?php echo $this->fetch('title'); ?></h1>
<?php echo $this->fetch('content'); ?>

<div class="actions">
    <h3>Related actions</h3>
    <ul>
    <?php echo $this->fetch('sidebar'); ?>
    </ul>
</div>
```

```htmlmixed=
// app/View/Posts/view.ctp
$this->extend('/Layouts/base');

$this->assign('title', $post);

$this->start('sidebar');
?>
sidebar
<?php $this->end(); ?>
```

Custom Flash message
```php=
$this->Session->setFlash('Success message!', 'success_alert');
$this->Session->setFlash('Error message!', 'error_alert');
```
Tạo 2 file tương ứng ví dụ: `/View/Elements/error_alert.ctp` và `/View/Elements/success_alert.ctp`
```php=
<?php echo $message ?>
```


## Model
Cập nhật, nếu không có trường ID có nghĩa là tạo mới
```php=
$data = array('id' => 10, 'title' => 'My new title');
// This will update Recipe with id 10
$this->Recipe->save($data);
```

```php=
$data = array(
    'ModelName' => array(
        'foo' => $foo
    )
)

// prepare the model for adding a new entry
$this->ModelName->create();

// save the data
$this->ModelName->save($data);
```

Kết nối table đặt tên không theo quy chuẩn của cake
```php=
class Example extends AppModel {
    public $useTable = 'exmp'; // This model uses a database table 'exmp'
}
```

## Route
Có thể tuỳ chỉnh route trong file `application/app/Config/routes.php`
```php=
Router::connect(
    '/government',
    array('controller' => 'pages', 'action' => 'display', 5)
);

```