Các liên kết được định nghĩa bằng cách tạo ra một lớp biến được đặt tên sau liên kết mà bạn đang định nghĩa.. Trước tiên, các bảng cơ sỡ dữ liệu của bạn phải được đặt khóa chính xác.Đối
Trang 1“ Add your company slogan ”
Trang 3Giới thiệu CakePHP
Hỗ trợ tạo kết nối đến cơ sở dữ liệu một
cách đơn giản và thuận lợi, chỉ với một
chuỗi kết nối đặt trong file
configs/database.php
Trang 4Giới thiệu CakePHP
Sinh code tự động dựa trên cơ sở dữ liệu đã
có, kiểm tra và nhận biết tự động các ràng buộc, quan hệ trong cơ sở dữ liệu.
Tích hợp sẵn nhiều thư viện hỗ trợ cho việc lập trình và thiết kế giao diện trở nên đơn
giản như: Ajax, HTML Form, Javascript…
Trang 5Cài đặt CakePHP
cakephp vào web server
2.Cài đặt
Trang 6- Cũng như các PHP framework khác, CakePHP hoạt động theo mô hình MVC
- Việc phân tách ứng dụng rõ ràng như vậy sẽ
giúp bạn tách bạch các phần xử lý riêng biệt
cho website của bạn, nó giúp cho code của bạn trong sáng hơn, dễ lập trình, dễ quản lý, chỉnh sửa, nâng cấp
Trang 7 Model :Là lớp đầu tiên tương tác với cơ sở dữ
liệu trong các ứng dụng của bạn Trên Model ta
có thể thiết lập các ràng buộc dữ liệu, quan hệ giữa các bảng, bạn sẽ viết các truy vẫn cũng
như các xử lý logic ở đây
View :Đảm nhận việc hiển thị thông tin đã được
xử lý gởi đến từ Controller
sử dụng để tạo các file HTML hiển thị cho
người sử dụng
Trang 8Xử lý và điều hướng các yêu cầu của client.
Nơi trực tiếp xử lý các request từ url và form
để thao tác trực tiếp với Model, sau đó dùng
View để hiển thị ra
Trang 9Model-View-Controller
Trang 10//action logic goes here } public function share($customerId, $recipeId) { //action logic goes here }
} ?>
Trang 11Controller Methods
1 Tương tác với Views
Controller tương tác với View theo một số
cách:
Trang 12- render(string $action, string $layout, string $file)
render() được gọi tự động ở cuối mỗi lần yêu cầu controller Phương thức này được thực
hiện ở tất cả các view (sử dụng dữ liệu được
đưa ra trong set()), thay chỗ các view vào trong các layout và thể hiện ra giao diện người dùng
Trang 13 Controller Attributes
$name: dùng để đặt tên cho controller, thông thường tên chỉ là số nhiều của tên Model được sử dụng
<?php
// $name controller attribute usage example
class RecipesController extends AppController {
public $name = 'Recipes';
}
?>
Trang 15<?php
// Using $layout to define an alternate layout
class RecipesController extends AppController {
function quickSave() {
$this->layout = 'ajax';
} }
?>
Trang 16hiện tại trong yêu cầu (request).
Ví dụ: nếu URL /posts/view/1 được yêu cầu thì
$this>params['controller'] là "posts"
Trang 17hiện tại chứa trong yêu cầu
Ví dụ: nếu yêu cầu URL /posts/view/1 được
yêu cầu thì $this>params['action'] chứa"view"
chỉ số bằng số) các tham số sau action
form được lưu trữ Thông tin kèm theo cũng được chứa trong $_FILES
Trang 18Tập tin của View được lưu trong /app/views,
được đặt tên theo các hành động tương ứng
với nó
app/views/products/view.ctp
Trang 19View Method:
set(string $var, mixed $value):
tượng controller
controller đến view của bạn Một khi bạn sử
view
<?php $this->set('activeMenuButton', 'posts'); ?>
Sau đó trong layout biến $activeMenuButton sẽ có hiệu lực và có giá trị
Trang 20addScript(string $name, string $content)
Phương thức này hữu ích khi tạo các Helpers cần phải thêm javascript hoặc css trực tiếp cho layout Phương pháp này thường được sử
dụng từ các Helpers bên trong, giống như
Javascript và Html Helpers
Trang 21$request: Một thực thể của CakeRequest Sử dụng thực thể này để truy cập thông tin về các yêu cầu hiện tại.
Trang 23CakePHP tự động làm cho Model cho phép
truy cập khi nó có tên phù hợp với Controller
Trang 24Ví dụ :
Một Controler được đặt tên là
IngredientsController sẽ tự độngkhởi tạo model
Ingredient và gắn nó vào controller bằng
$this->Ingredient
<?php
class IngredientsController extends AppController {
public function index() {
//grab all ingredients and pass it to the view:
$ingredients = $this->Ingredient->find('all');
$this->set('ingredients', $ingredients); } }
?>
Trang 25Model Method:
field(string $name, array $conditions = null,
string $order = null)
Trả về giá trị của một trường duy nhất được chỉ định bằng biến $name từ bản ghi đầu tiên thỏa mản $conditions với thứ tự sắp xếp bởi biến
Trang 26read(): là phương thức được dùng để thiết lập
mô hình dữ liệu hiện hành, nhưng nó còn được dùng trong trường hợp lấy một bản ghi ra từ cơ
sở dữ liệu
function beforeDelete($cascade)
{
$rating = $this->read('rating'); // gets the rating of the recordbeing deleted.
$name = $this->read('name', $id2); // gets the name of a second record.
$rating = $this->read('rating'); // gets the rating of the second record.
$this->id = $id3; //$this->read(); // reads a third record
$record = $this->data // stores the third record in $record
}
Trang 27[fieldname1] => 'value'
[fieldname2] => 'value' )
Trang 28Ví dụ:
<?php
public function edit($id) {
// Has any form data been POSTed?
if ($this->request->is('post')) { // If the form data can be validated and saved
if ($this->Recipe->save($this->request->data)) { // Set a session flash message and redirect
$this->Session->setFlash('Recipe Saved!');
$this->redirect('/recipes');
} // If no form data, find the recipe to be edited and hand it to the view
$this->set('recipe', $this->Recipe->findById($id));
} ?>
Trang 29Xóa dữ liệu:
delete (int $id = null, boolean $cascade = true);
Xóa bản ghi được chỉ định bởi biến $id Mặc định thì xóa cả những bản ghi có liên quan tới bản ghi được chỉ định.
Ví dụ khi xóa một User thì các thông tin liên quan tới User đó cũng được xóa.
deleteAll (mixed $conditions, $cascade = true,
$callbacks = false)
Giống như delete , nhưng deleteAll() xóa tất cả các bản ghi được chỉ định bởi một điều kiện ràng buộc.
Trang 30Quan hệ trong Models
Trong CakePHP, các liên kết giữa các models được
xử lý thông qua các mối liên hệ.
Xác định các mối quan hệ trong công việc cho phép bạn truy cập dữ liệu của bạn một cách trực quan và mạnh mẽ.
Các loại quan hệ:
one to one hasOne A user has one profile.
one to many hasMany A user can have multiple recipes many to one belongsTo Many recipes belong to a user.
many to many hasAndBelongsToMany Recipes have, and belong to many
ingredients.
Trang 31Các liên kết được định nghĩa bằng cách tạo ra một lớp biến được đặt tên sau liên kết mà bạn đang định nghĩa Lớp biến đó đôi khi có thể là một chuỗi, nhưng có thể là một mảng đa chiều
để xác định cụ thể mối liên kết
<?php
class User extends AppModel {
public $hasOne = 'Profile';
public $hasMany = array(
'Recipe' => array(
'className' => 'Recipe', 'conditions' => array('Recipe.approved' => '1'), 'order' => 'Recipe.created DESC' )
Trang 32Trước tiên, các bảng cơ sỡ dữ liệu của bạn
phải được đặt khóa chính xác.Đối với một mối quan hệ hasOne, một table chỉ chứa khóa
ngoại đến một table khác
Apple hasOne Banana bananas.apple_id
User hasOne Profile profiles.user_id
Doctor hasOne Mentor mentors.doctor_id
Trang 33belongsTo: Kết hợp belongsTo là sự bổ sung
tự nhiên cho kết hợp hasOne và hasMany: Nó cho phép chúng ta xem dữ liệu từ một phương diện khác
Khi đặt khóa cho bảng dữ liệu đối với mối liên kết belongsTo phải theo quy ước sau:
Banana belongsTo Apple bananas.apple_id
Profile belongsTo User profiles.user_id
Trang 34Một kết hợp hasMany sẽ cho phép chúng ta lấy comment của user khi chúng ta lấy một bảng
ghi của user đó
Khi đặt khóa cho bảng dữ liệu đối vơi một liên kết hasMany phải theo quy ước sau:
User hasMany Comment Comment.user_id
Cake hasMany Virtue Virtue.cake_id
Product hasMany Option Option.product_id
Trang 35hasAndBelongsToMany (HABTM)
Kết hợp này được dùng khi bạn có hai model
cần kết nối với nhau liên tục nhiều lần và nhiều cách khác nhau
Sự khác biệt chính giữa hasMany và HABTM là một liên kết giữa các model trong HABTM
không phải độc quyền Trong khi đó liên kết
giữa các model trong hasMany thì độc quyền Nếu User hasMany với Comments thì một
comment chỉ có thể liên kết tới một user xác
Trang 36Khi đặt khóa cho bảng dữ liệu đối vơi một liên kết hasMany phải theo quy ước sau:
Recipe HABTM
Ingredient
ingredients_recipes.id, ingredients_recipes.ingredient_id, ingredients_recipes.recipe_id
Cake HABTM Fan cakes_fans.id, cakes_fans.cake_id, cakes_fans.fan_id
Foo HABTM Bar bars_foos.id, bars_foos.foo_id, bars_foos.bar_id
Trang 37Một số quy ước cơ bản
Cách đặt tên file, tên lớp
Tên file sử dụng chữ thường, dùng dấu
- Tên lớp viết hoa chữ cái đầu tiên của từ
Ví dụ : ta có tên lớp là MyClass-> file
Trang 38Một số quy ước cơ bản
Sau đây là các ví dụ về cách đặt tên file cho mỗi dạng lớp khác nhau:
Class tương ứng Tên file
Controller NewsCategoriesController Newscategories_controller.php Component SmtpMailComponent Smtp_mail.php
View MySimpleView my_simple.php
Helper MyImageHelper my_image.php
Trang 39Một số quy ước cơ bản
Các qui ước về Model và CSDL
-Tên các lớp model được đặt ở dạng số ít và
việc viết hoa thường tuân theo CamelCased
Ví dụ: Person, BigPerson và ReallyBigPerson
- CakePHP không hỗ trợ khóa chính gồm nhiều cột
Nếu bạn muốn thao tác trực tiếp kết nối (join) các bảng, hãy truy vấn trực tiếp hoặc thêm một khóa chính thay cho khóa nhiều cột
Trang 40Một số quy ước cơ bản
VD: CREATE TABLE order_detail (
id int NOT NULL AUTO_INCREMENT,
product_id int NOT NULL, order_id int NOT NULL, quantity int NOT NULL, amount float NOT NULL,
PRIMARY KEY ( id ) );
- Tên bảng tương ứng với các model của
CakePHP ở dạng số nhiều và sử dụng gạch dưới (_)
Trang 41Một số quy ước cơ bản
Qui ước về Controller :
- Tên lớp của controller đặt theo dạng số nhiều.
- Tuân theo CamelCased và cuối tên phải có
Trang 42Một số quy ước cơ bản
- Các khóa ngoại trong các quan hệ
hasMany, belongsTo, hasOne có tên
mặc định là số ít của tên bảng kèm theo
nhiều News, bảng news sẽ có khóa ngoại
news_category_id
Trang 43Một số quy ước cơ bản
- Khóa chính mặc định trong CakePHP là cột id, kiểu int, tự tăng Tuy nhiên, bạn cũng có thể
định nghĩa lại khóa chính cho bảng thông qua biến $primaryKey trong model
tạo ra UUIDs để làm khóa khi ta thêm mới một
ứng với 36 ký tự.
Trang 44Một số quy ước cơ bản
- Khi một phương thức trong Controller được đặt
không thể truy xuất nó từ bên ngoài mà chỉ có thể truy xuất trong controller đó (cái này gọi là private)
- VD: <?php
Class ProductsControllers extends AppController{
function index(){
//Mã lệnh ở đây } function _get_product(){
//Mã lệnh ở đây } function viewProduct(){
$this ->_get_product(); } } ?>
Trang 45“ Add your company slogan ”
Demo
Trang 46“ Add your company slogan ”
Thank You !
Trang 47Thank You !