Hướng dẫn sử dụng làm web với cakephp

Hướng dẫn sử dụng làm web với cakephp

CakePHP là một framework cho php, mục đích của nó là cung cấp một framework cho người sử dụng php phát triển những ứng dụng web nhanh, mạnh mà không mất tính linh hoạt của nó. Và điều quan trọng là CakePHP is free.Trang chủ cakephp: http://cakephp.org Để sử dụng nó, yêu cầu người làm phải biết những kiến thức cơ bản về PHP và HTML, … Có thể đọc nội dung chi tiết về nội dung cũng như ví dụ của nó tại http://manual.cakephp.org Huypvt

Mục lục

[ẩn]

//

[sửa] Download framework

Click vào liên kết sau để tải về cakephp framework: http://cakephp.org/downloads (chọn stable release).

[sửa] Cài đặt và cấu hình cakephp

[sửa] Cài đặt

Để sử dụng nó, cần phải đáp ứng những yêu cầu sau: – Một HTTP Server (vd như Apache, IIS) – CakePHP chỉ support trong PHP ver 4 trở lên. – Database: cake hổ trợ các hệ cơ sở dữ liệu sau: MySql, PostgreSQL. Bài hướng dẫn này được viết dựa trên “AppServ Version 2.5.7 for Windows” gồm – Apache Web Server Version 2.2.3 – PHP Script Language Version 5.1.6 – MySQL Database Version 5.0.24a – phpMyAdmin Database Manager Version 2.9.0.2 Sau khi download cakephp về, bạn giải nén tập tin đó ra (.zip) và sao chép vào thư mục chứa Apache Server (vd: C:\AppServ\www\MyCake). VD:

     /MyCake
       /app
       /cake
       /vendors
       .htaccess
       index.php

[sửa] Cấu hình

Để cake có thể làm việc được với database, cần cấu hình lại trang database.php, mặc định trang này không có, để cấu hình ta làm như sau: – Mở file database.php.default ở /app/config và Save As lại thành file database.php. – Điều chỉnh lại các thông số:

      var $default = array('driver'   => 'mysql',
                    'connect'  => 'mysql_connect',
                    'host'     => 'localhost',
                    'login'    => 'user',
                    'password' => 'password',
                    'database' => 'project_name',
                    'prefix'   => ' ',

Với user, password, database lần lượt là: tên user, password và database ở trong MySql. Quy ước về đặt tên bảng trong database

  • Tên bảng trong cake nên ở dạng tiếng Anh số nhiều (vd: users, customers, students, … )
  • Bảng phải có primary key tên là ‘id’
  • Nếu có sử dụng quan hệ trong các bảng vd: user_id (user không có s và dấu _ cộng id)

[sửa] Ví dụ sử dụng CakePHP để quản lý khách hàng trong web application “Quản lý phòng trọ”

Tôi sẽ nói đến tính năng, cũng như mô hình hoạt động của CakePHP, cách viết một web application bằng cakephp tôi sẽ nói dần với các bạn qua ví dụ: Sau khi cài đặt và cấu hình CakePHP, kiểm tra CakePHP đã setup chưa, bạn test thử bằng cách mở webbrowserlên go http://localhost/MyCake/ bạn sẽ thấy giao diện như sau

Cakephp.JPG

Cần chú ý đến 2 dòng Your database configuration file is present. Cake is able to connect to the database. Xác định xem bạn đã kết nối được Cake với database của bạn hay chưa.

[sửa] Tạo bảng cơ sở dữ liệu

Ta tạo bảng customers với những field như sau:

id: INT, AUTO_INCREMENT, PRIMARY KEY
name: NVARCHAR
age: INT
address: NVARCHAR

[sửa] Viết Code

Mở trình soạn thảo và tạo các file và nội dung như sau lưu theo đường dẫn chỉ định File customer.php -> C:\AppServ\www\MyCake\app\models\

   <?php
   class Customer extends AppModel
   {
       var $name = 'Customer';
   }
   ?>

File customers_controller.php -> C:\AppServ\www\MyCake\app\controllers

  <?php
   class CustomersController extends AppController
   {
       var $name = 'Customers';
       function index()
       {
            $this->set('customers', $this->Customer->findAll());
       }
   }
   ?>

File index.thtml -> C:\AppServ\www\MyCake\app\views\customers\ Chú ý tạo thư mục customers trong /app/views

  
   <h1>Customer Manager</h1>
   <table>
       <tr>
           <th>Id</th><th>Name</th><th>Age</th><th>Address</th>
       </tr>
       <?php foreach ($customers as $cust): ?>
       <tr>
           <td><?php echo $cust['Customer']['id']; ?></td>
           <td>
               <?php echo $html->link($cust['Customer']['name'], '/customers/view/'.$cust['Customer']['id']);?>
               <?php echo $html->link(
                   'Delete',
                   "/customers/delete/{$cust['Customer']['id']}",
                   null,
                   'Are you sure?'
               )?>
               <?php echo $html->link('Edit', '/customers/edit/'.$cust['Customer']['id']);?>
           </td>
           </td>
           <td><?php echo $cust['Customer']['age']; ?></td>
           <td><?php echo $cust['Customer']['address']; ?></td>
       </tr>
       <?php endforeach; ?>
   </table>
   <p><?php echo $html->link("Add Customer", "/customers/add"); ?>

Xong 3 trang đó, chúng ta test chạy thử , mở webbrowser http://localhost/MyCake/customers Bạn sẽ thấy giao diện trang chính như hình sau: Url.JPG Như vậy là bạn đã tạo được ứng dụng đơn giản đầu tiên về việc sử dụng cakephp để viết ứng dụng web. Tiếp theo tôi sẽ giải thích cho các bạn mô hình hoạt động của CakePHP, cách viết các trang,cũng như cách sử dụng biến, hàm …

[sửa] Mô hình hoạt động

Như tôi đã giới thiệu CakePHP là một framework, mô hình hoạt động của nó tương tự mô hình 3 lớp MVC trong lập trình hướng đối tượng. Với tầng trên cùng là view, tiếp theo là tầng controller và cuối cùng là tầng model. Tầng model sẽ giao tiếp với cơ sở dữ liệu của chúng ta.

[sửa] Model

Trong ví dụ trên các bạn thấy trong file customer.php với cách viết code như trên, được Cake hiểu là ta muốn tạo một model tên là Customer để sử dụng trong CustomersController của chúng ta. Biến $name được chỉ định để tránh trường hợp model của chúng ta trùng với tên của các hàm của php. Và lớp Customer sẽ được kế thừa các thuộc tính và phưông thức từ lớp AppModel. Để có thể hiểu chi tiết về model và cách sử dụng các thuộc tính và hàm của model bạn có thể tham khảo tại http://manual.cakephp.org/chapter/models

[sửa] Controller

Controller được sử dụng để quản lý việc giao tiếp với cơ sở dữ liệu, thiết lập các yêu cầu theo ý muốn của chúng ta để thể hiện lên view vidu như các hàm xử lý thêm, xóa, sữa và hiển thị, …, là nơi mà tất cả các hoạt động của model ta sẽ quản lý nó được. Trong ví dụ trên (customers_controller.php)đoạn code trên được Cake hiểu rằng ta sẽ tạo một CustomersController dùng để quản lý việc sử dụng, các hoạt động của CustomerModel. Tương tự lớp CustomersController sẽ kế thừa từ lớp AppController. Hàm index() sẽ được xử lý khi ta gọi trang index.thtml. Trong đó có phương thức set() được sử dụng để gán giá trị là một mảng được trả về từ phương thức findAll() tại của model Customer. Trong ví dụ trên thì biến $customers sẽ mang giá trị là mảng các customer được lấy từ bảng customers từ database. Để xem chi tiết về controller các bạn có thể tham khảo tại: http://manual.cakephp.org/chapter/controllers

[sửa] View

View là nơi thể hiện dữ liệu đã được xử lý của chúng ta. Một view được xem như một trang template. Chúng ta có thể lấy dữ liệu từ model tương ứng. Dữ liệu được truyền qua một mãng $data. Trong ví dụ trên thì index.thtml là một view. Phần tiếp theo tôi sẽ nói đến chi tiết view thông qua ví dụ trên. Tiếp theo ta tìm hiểu đến các thuộc tính và phương thức trong index.thtml <?php foreach ($customers as $cust): ?> Biến $customers chính là biến mà ta đã thiết lập bằng phương thức set() ở CustomersController của ví dụ. Nó mang giá trị là một mãng như tôi đã nói. $html là một đối tượng của lớp helpers sẽ được đề cập trong phần tới. Phương thức link() được sử dụng để xuất ra một liên kết giống href trong HTML với tham số đầu tiên là tựa để của liên kết, tham số thứ 2 là url.

[sửa] Hoàn chỉnh các chức năng của modul quản lý customer

Ta sẽ thêm các chức năng thêm, sữa, xóa, hiển thị trong view của chúng ta. Ta thêm các hàm trong customers_controller như sau:

  <?php
   class CustomersController extends AppController
   {
       var $name = 'Customers';
       function index()
       {
            $this->set('customers', $this->Customer->findAll());
       }
       function view($id)
       {
           $this->Customer->id = $id;
           $this->set('customers', $this->Customer->read());
       }
       function add()
       {
           if (!empty($this->data))
           {
               if ($this->Customer->save($this->data))
               {
                   $this->flash('Your customer has been saved.','/customers');
               }
           }
       }
       function delete($id)
       {
           $this->Customer->del($id);
           $this->flash('The customer with id: '.$id.' has been deleted.', '/customers');
       }
       function edit($id = null)
       {
           if (empty($this->data))
           {
               $this->Customer->id = $id;
               $this->data = $this->Customer->read();
           }
           else
           {
               if ($this->Customer->save($this->data['Customer']))
               {
                   $this->flash('Your customer has been updated.','/customers');
               }
           }
       }
   }
   ?>

Như vậy ta đã thêm 4 function trong CustomersController của chúng ta. Function sẽ được gọi ở view. Ví dụ trên ta click vào link Add Customer thì function sẽ được thực hiện và thể hiện lên view add của chúng ta. Bạn tạo file add.thtml với nội dung như sau:

 
  <h1>Add Customer</h1>
<form method="post" action="<?php echo $html->url('/customers/add')?>">
    <p>
        Name:
        <?php echo $html->input('Customer/name', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/name', 'Name is required.') ?>
    </p>
    <p>
        Age:
        <?php echo $html->input('Customer/age', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/age', 'Age is required.') ?>
    </p>
    <p>
        Address:
        <?php echo $html->input('Customer/address', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/address', 'Address is required.') ?>
    </p>
    <p>
        <?php echo $html->submit('Save') ?>
    </p>
</form>

Trong view add trên dòng <?php echo $html->input(‘Customer/name’, array(‘size’ => ’40’))?> sẽ xuất ra một thẻ input text. Với dòng lệnh trên thì Cake sẽ hiểu rằng ta sẽ sử dụng trường name trong model Customer.Tham số thứ 2 là thuộc tính của thẻ input trong HTML. Tương tự với thẻ submit. Hàm tagErrorMsg() sẽ thông báo lỗi ở view trong trường hợp dữ liệu nhập của ta bị lỗi. Việc xử lý lỗi sẽ được nói trong phần sau. Tương tự ta tạo các file edit.thtml, view.thtml như sau:

  edit.thtml

   <h3>Edit Your Customer</h3>
<form method="post" action="<?php echo $html->url('/customers/edit')?>">
    <?php echo $html->hidden('Customer/id'); ?>
    <p>
        Name:
        <?php echo $html->input('Customer/name', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/name', 'Name is required.') ?>
    </p>
    <p>
        Age:
        <?php echo $html->input('Customer/age', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/age', 'Age is required.') ?>
    </p>
    <p>
        Address:
        <?php echo $html->input('Customer/address', array('size' => '40'))?>
        <?php echo $html->tagErrorMsg('Customer/address', 'Address is required.') ?>
    </p>
    <p>
        <?php echo $html->submit('Save') ?>
    </p>
</form>

view.thtml

 
 <h3>Your Customer</h3>
 <h1>Name   :<?php echo $customers['Customer']['name']?></h1>
 <h1>Age    :<?php echo $customers['Customer']['age']?></h1>
 <h1>Address:<?php echo $customers['Customer']['address']?></h1>

Như vậy các chức năng của ta đã được thực hiện hoàn chỉnh.

10 Responses to Hướng dẫn sử dụng làm web với cakephp

  1. ip camera nói:

    Wonderful article post on the blog bro. This particular is just a tremendously nicely structured blog post, just the data I was looking just for. Thank you

  2. Maintain up the great work mate. This weblog publish shows how well you realize and know this subject.

  3. jack nói:

    Good ! Thanks Brồ

  4. 網路行銷 nói:

    Great piece of details that you’ve obtained on this website submit. Hope I might get some a lot more of the stuff in your website. I will are available back again.

  5. 徵信社 nói:

    Thanks for taking the time to discuss this, I feel strongly about information and love learning more on this. If possible,it is very helpful for me.

  6. Ill likely be by again to read more, thanks for the info!. If you have a chance check out my site electronic dance music.

  7. I just want to mention I am very new to blogging and actually loved this blog. Most likely I’m want to bookmark your website . You definitely come with impressive articles and reviews. Cheers for revealing your web page.

  8. Randy Joos nói:

    I just want to say I’m all new to weblog and seriously enjoyed your page. Almost certainly I’m likely to bookmark your site . You definitely have terrific articles. Bless you for revealing your web page.

  9. Whats up! I simply want to give an enormous thumbs up for the nice information you’ve right here on this post. I can be coming again to your weblog for extra soon.6364 SE MCNARY RD MILWAUKIE OR 97267

  10. Pingback: google

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: