Thứ Bảy, 2 tháng 12, 2017

Hướng dẫn cài đặt CodeIgniter

Hướng dẫn cài đặt CodeIgniter

Trong PHP Framework thì Codeigniter là một trong những frame phổ biến và dễ tiếp cận nhất. Codeigniter thật sự đã trở nên mạnh mẽ và đầy đủ với các thư viện hỗ trợ người dùng từ dễ đến khó trong việc phát triển ứng dụng web.

Để hiểu biết sâu hơn về Framwork, trước tiên các bạn cần phải học từ nền móng, biết cách cài đặt , có kiến thức nhất định về hướng lập trình đối tượng và cách xử lý mảng. Đồng thời am hiểu về cấu trúc M-V-C để có thể hiểu được quy trình và hướng hoạt động toàn bộ ứng dụng.

Với những bạn mới, chưa biết gì về framework thì Blog Nibin xin chia sẻ với các bạn cách cài đặt Codeigniter và cách chạy một ứng dụng đơn giản, nhằm giúp các bạn dễ dàng tiếp cận hơn với việc học nhé.

1.  Cài đặt CodeIgniter Framework


Để cài đặt và chạy ứng dụng đầu tiên trong codeigniter. Bạn cần download bộ framework này tại đây:
http://codeigniter.com/download.php

Sau khi download xong. Chúng ta giải nén sẽ thấy bố cục của chúng như hình bên dưới.



Như các bạn thấy, chúng ta có tới 3 thư mục là: application, system, user_guide và file index.php. Trong đó, chúng ta chỉ quan tâm tới 2 thư mục là application, system và file index.php mà thôi.

Copy chúng vào thư mục của riêng bạn. Trong trường hợp này, tôi tạo thư mục tên ciexam để chứa chúng.

Sau khi đã hoàn tất thao tác, kế tới ta tìm hiểu xem, chức năng của 2 thư mục này như thế nào nhé.
+ Thư mục system là thư mục dùng để chứa thư viện mặc định ban đầu của framework.
+ Thư mục application là thư mục dùng để chứa code do chúng ta tạo ra.
Vì thế, sau này chúng ta chủ yếu sẽ thao tác ở thư mục application mà thôi.


Như các bạn đã thấy ở hình trên. Thư mục application của chúng ta lại chứa khá nhiều thư mục khác. Chúng ta sẽ tìm hiểu nhiệm vụ của các thư mục mà chúng ta thường thao tác như thế nào nhé.

+ Thư mục config: Dùng để chứa các file cấu hình như kết nối CSDL, cấu hình đường dẫn, cấu hình ngôn ngữ,….
+ Thư mục Controllers: Chứa các file controller của ứng dụng.
+ Thư mục Models: Chứa các file thao tác trên CSDL của ứng dụng.
+ Thư mục Views: Chứa các file hiển thị thông tin khi tương tác

2. Viết ứng dụng đầu tiên với codeigniter


Tạo file Hello.php trong thư mục controllers với nội dung:
<?php
class Hello extends CI_Controller{
    public function __construct(){
        parent::__construct();
    }
    public function index(){
        echo "<h3>Hello CodeIgniter Framework - QHOnline.Info</h3>";
    }
}
Sau đó chạy localhost theo đường dẫn:
http://localhost/ciexam/index.php/hello

Và kết quả sẽ xuất ra lời chào như trong code.

Đọc hiểu đoạn code trên:

+ Khi khởi tạo controller thì tên file và tên lớp phải giống nhau. Cụ thể ở đây là tên lớp hello và tên file hello.php phải giống nhau.

+ Theo quy tắc của CodeIgniter thì chữ cái đầu tiên của lớp phải viết hoa.

+ Mọi lớp tạo ra trên quy tắc là phải kế thừa lớp CI_Controller

+ Để chống việc ghi đè lớp có sẵn trong CodeIgniter, chúng ta phải sử dụng từ khóa parent để bảo lưu thông tin từ các phương thức trước đó. Mà cụ thể là phương thức khởi tạo construct().

+ Để chạy các action thì chúng ta phải tạo nó như 1 phương thức bình thường. Đối với CodeIgniter và 1 số php framework khác thì index luôn được xem là action mặc định của controller đó.

+ Để chạy ứng dụng ta phải đi qua file index.php. File này được hiểu là một front controller. Nó sẽ điều hướng dữ liệu mà chúng ta sẽ gởi đi.

Liên kết chạy sẽ theo kiến trúc:http://localhost/ciexam/index.php/ten_controller/ten_action

Do đó, khi chạy ta dùng link:http://localhost/ciexam/index.php/hello

Có nghĩa là bạn đang chạy controller hello, ở đây không chỉ ra action thì có nghĩa là dùng action mặc định index.

Ví dụ tạo 1 action khác thì ta có:
<?php>
class Hello extends CI_Controller{
    public function __construct(){
        parent::__construct();
    }
    public function index(){
        echo "<h3>Hello CodeIgniter Framework - QHOnline.Info</h3>";
    }
    public function hocphp(){
        echo "<h3>Hoc PHP Tai QHOnline.Info</h3>";
    }
}
Như bạn thấy, để chạy nó. Ta sẽ có liên kết sau:
http://localhost/ciexam/index.php/hello/hocphp

Lưu ý:Tên action không được phép đặt là list. Nếu đặt là list hệ thống sẽ báo lỗi.


Thứ Năm, 18 tháng 6, 2015

Phân trang trong CakePHP Framework

Phân trang trong CakePHP Framework

Trong bài trước chúng ta đã tìm hiểu cách thao tác trên cơ sở dữ liệu trong CakePHP Framework. Tiếp theo trong phần này chúng ta sẽ đi tìm hiểu một kỹ thuật phổ biến và được sử dụng trong hầu hết các ứng dụng đó là kỹ thuật phân trang. Cụ thể bài này chúng ta sẽ tìm hiểu Phân trang trong CakePHP Framework.

                                                                hình ảnh minh họa

Giả sử ta làm việc với bảng dữ liệu như trong bài trước. Ta sẽ thay đổi nội dung file InfosController như sau :
<?php
class InfosController extends  AppController{
    var $name = "Infos";// ten cua Controller Info
    var $helpers = array('Paginator','Html');
    var $components = array('Session');
    var $paginate = array();
       
    function paging(){
        $this->paginate = array(
          'limit' => 3,
          'order' => array('id' => 'desc'),
        );
        $data = $this->paginate("Info");
        $this->set("data",$data);
    }
?>

Để sử dụng chức năng phân trang trong CakePHP Framework thì cần có helper Paginator
var $helpers = array('Paginator','Html');

và namespace paginate
var $paginate = array();

Chúng ta sẽ lấy 3 bản ghi đầu tiên theo id giảm dần
$this->paginate = array(
  'limit' => 3,
  'order' => array('id' => 'desc'),
);

Để lấy dữ liệu theo cấu hình của biến namespace paginate ta dùng hàm
$this->paginate("ten_model")

trong ví dụ này model của tôi có tên là Info.
$data = $this->paginate("Info")

Việc cấu hình biến namspace paginate dùng hàm
$this->paginate("ten_model")

Giống như việc cấu hình điều kiện truy xuất dữ liệu và lấy dữ liệu bằng hàm $this->find(‘…’).
Như vậy là chúng ta có thể phân trang trong CakePHP Framework, mặc định CakePHP sẽ dùng biến page để xác định trang hiện tại. Bây giờ chúng ta chỉ cần xây dựng view để hiển thị phân trang trong quá trình học PHP.

Trong thư mục app/views/infos ta tạo một file có tên là paging.ctp có nội dung như sau :

<html>
<body>
<?php
    // Tạo link về trang trước
    echo $this->Paginator->prev('« Previous ', null, null, array('class' => 'disabled'));

    // Tạo link tương ứng với số trang
    echo " | ".$this->Paginator->numbers()." | ";

    // Tạo link đi đến trang sau
    echo $this->Paginator->next(' Next »', null, null, array('class' => 'disabled'));

    // Hiển thị trang hiện tại và tổng số trang
    echo " Page ".$this->Paginator->counter();
?>

<?php
if($data==NULL){
    echo "<h2>Dada Empty</h2>";
}
else{
    echo "<table>
          <tr>
            <td>id</td>
            <td>Name</td>
            <td>Email</td>
            <td>Phone</td>
          </tr>";
    foreach($data as $item){
        echo "<tr>";
        echo "<td>".$item['Info']['id']."</td>";
        echo "
          <td><a href='".$this->webroot."infos/view/".$item['Info']['id']."' >".$item['Info']['name']."</a>
          </td>";
        echo "<td>".$item['Info']['email']."</td>";
        echo "<td>".$item['Info']['phone']."</td>";
        echo "</tr>";
    }
}
?>
</body>
</html>

Nguồn: the gioi web
Một số quy tắc trong CakePHP Framework

Một số quy tắc trong CakePHP Framework

Tiếp tục với series CakePHP Framework, trong bài này chúng ta sẽ đi tìm hiểu một số quy tắc trong CakePHP Framework giúp cho các bạn có thể nắm bắt và sử dụng CakePHP một cách linh hoạt nhất.

Quy tắc đặt tên file, tên class

  • Tên File sử dụng chữ in thường và phân cách các từ bằng dấu gạch dưới (_)  ví dụ: my_file.php
  • Tên Class phải viết hoa chữ cái đầu tiên của từ ví dụ: MyClass
  • Quy tắc trong Model và Cơ sở dữ liệu (CSDL)


      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.

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 (_). Ví dụ ứng với model  CategoriesProducts là categories_products. Bạn có thể dùng thư viện Inflector có sẵn trong CakePHP để kiểm tra dạng số ít/số nhiều của các từ.


Các khóa ngoại trong các quan hệ có tên mặc định là số ít của tên bảng kèm theo_id ở cuối cùng. Ví dụ với quan hệ NewsCategory có nhiều News, bảng news sẽ có khóa ngoại đến bảng news_categories lànews_category_id.

 Các bảng liên kết được sử dụng trong quan hệ nhiều-nhiều đặt tên bằng cách kết nối các tên model theo thứ tự abc, vì vậy tên đúng sẽ là apples_zebras chứ không phải là zebras_apples. Do đó, ta phải thêm một khóa khác có tên là id

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. Thay cho việc sử dụng kiểu int, auto-increment làm khóa chính, bạn có thể sự dụng char(36) hoặc binary(36), khi đó CakePHP sẽ tự động tạo ra UUIDs để làm khóa khi ta thêm mới một record. UUID là một chuỗi gồm 32 byte, tương ứng với 36 ký tự.

Quy tắc trong Controllers

  • Tên lớp của controller đặt theo dạng số nhiều.
  • Tuân theo CamelCased (viết hoa chữ cái đầu tiên của mỗi từ) và cuối tên phải có chữ “Controller”.


Ví dụ: Tạo một controller có tên “products” thì class sẽ có tên là ProductsController.
<?php
   Class ProductsController extends AppController{
     //Code...
   }
?>
Khi một phương thức trong Controller được đặt tên bắt đầu với với dấu “_”ở phía trước, bạn sẽ không thể truy xuất nó từ bên ngoài mà chỉ có thể truy xuất trong controller đó (hay phạm vi là private).

Ví dụ:
<?php
  Class ProductsControllers extends AppController{
    function index(){
      //Code...
    }

    function _get_product(){
      //Code...
    }

    function viewProduct(){
      $this->_get_product();
    }
  }
?>

Quy tắc trong Views

  • Giả sử trong Controller ta có controller ProductsController gồm 2 function get_all() và get_a_record(). Thì trong views (trong thư mục app/view/products ) ta cũng phải có 2 file get_all.ctp và get_a_record.ctp.


  • Mặc định, nếu trong controller ProductsController có phương thức view(), khi gọi function view() trên trình duyệt (http://localhost/products/view) thì Controller sẽ tìm file view.ctp trong app/views/news/view.ctp

* Tuy nhiên, để dễ dàng hơn trong việc lap trinh web, bạn có thể gọi một file view khác không phải là view.ctp bằng lệnh:
<?php
   $this->render('ten_view');
?>

Nguồn: the gioi web
Làm việc với Model trong CodeIgniter Framework

Làm việc với Model trong CodeIgniter Framework

Trong phần trước chúng ta đã tìm hiểu cách làm việc với View trong CodeIgniter Framework. Bài này chúng ta tiếp tục đi tìm hiểu một thao tác quan trọng nữa trong CodeIgniter đó là làm việc với Model trong CodeIgniter Framework.

Vậy Model trong CodeIgniter là gì và Model dùng để làm gì?

Model là tầng xử lý trung gian, nó nhận yêu cầu của các Controller và tương tác với cơ sở dữ liệu để trả về kết quả dưới dạng mảng dữ liệu. Tiếp đó chúng ta sẽ lấy các dữ liệu đó ra và đem hiển thị ở View.

Cấu hình kết nối với cơ sở dữ liệu

Vào file database.php theo đường dẫn application/config. Ta điều chỉnh các nội dungn
$db['default']['hostname'] = 'hosting';
$db['default']['username'] = 'user';
$db['default']['password'] = 'pass';
$db['default']['database'] = 'dbName';

Trong đó:

  • hosting : là hosting website của bạn.
  • user : là tên đăng nhập vào cơ sở dữ liệu.
  • pass: là mật khẩu đăng nhập vào cơ sở dữ liệu.
  • dbName: là tên cơ sở dữ liệu.

Sau khi đã thiết lập kết nối như trên thì khi nào cần sử dụng đến cơ sở dữ liệu chúng ta chỉ việc sử dụng cú pháp
$this->load->database();

Để hiểu rõ hơn vấn đề, chúng ta đi làm một ví dụ như sau:

In ra tất cả các thông tin của một bảng bất kỳ trong cơ sở dữ liệu. Giả sử trong trường hợp của tôi thì tôi có cơ sở dữ liệu “mydb” và trong đó có bảng khach_hang với 3 trường dữ liệu lần lượt là idCustomer, name, phone.

Bây giờ chúng ta sẽ đi xây dựng một hàm có chức năng lấy toàn bộ thông tin của bảng khach_hang. Trong thư mục models tạo mới một file có tên là mcustomer với nội dung như sau:
<?php
 Class Mcustomer extends CI_Model{
  function __construct(){
    parent::__construct();
    $this->load->database();
  }

  function get_all(){
    $query = $this->db->get("khach_hang");
    return $query->result_array();  
  }
 }

?>
Trong thư mục controllers tạo mới một file có tên customer.php nội dung như sau :
<?php
 Class Customer extends CI_Controller{
  function __construct(){
    parent::__construct();
    $this->load->model('Mcustomer');
  }

  function show(){
    $data = $this->Mcustomer->get_all();
    print_r($data);
  }
 }
?>
Trên thanh địa chỉ của trình duyệt ta truy cập tới: http://localhost/democi/index.php/customer/show để kiểm tra kết quả.

Đến bước này chắc có nhiều thắc mắc trong đầu các bạn. Chúng ta sẽ lần lượt phân tích ví dụ trên

Trong file mcustomer.php trong model

  • Đặt tên class tương tự như đặt tên class trong Controller, đó là tên class giống với tên file và phải viết hoa chữ cái đầu tiên.
  • Hàm __construct() là hàm khởi tạo, có chức năng thực thi toàn bộ nội dung trong nó mà không cần phải gọi đến hàm.
  • Câu lệnh $this->db->get(“khach_hang”) là câu lệnh lấy ra toàn bộ thông tin trong bản khach_hang. Tương đương với câu lệnh truy vấn “SELECT * FROM khach_hang” trong SQL.
  • Câu lệnh $query->result_array() là câu lệnh lấy dữ liệu trả về từ câu truy vấn dưới dạng mảng.

Trong file customer.php trong model

  • Câu lệnh $this->load->model(“Mcustomer”) là câu lệnh dùng để load model có tên là Mcustomer.
  • Chúng ta gọi đến một chức năng trong model theo cú pháp $this->tên_model->tên_hàm, như ở trên ta có $this->Mcustomer->get_all().

Như vậy các bạn đã nắm được quá trình làm việc với Model, từ đó sẽ phát triển hoc php lên và tùy thuộc vào mục đích,  chức năng mà bạn muốn xây dựng.

Một số phương thức tương tác cơ sở dữ liệu trên model trong CodeIgniter Framework

1. Lựa chọn trường dữ liệu
$this->db->select("trường_dữ_liệu_1", "trường_dữ_liệu_1", ....);

2. Điều kiện truy vấn
$this->db->where("trường_dữ_liệu","giá_trị");

3. Câu lệnh sắp xếp
$this->db->order_by("trường_sắp_xếp ASC | DESC");

4. Lấy tất cả bản ghi từ truy vấn
$query->result_array();

5. Lấy một bản ghi từ truy vấn
$query->row_array();

6. Đếm số dòng trả về từ truy vấn
$query->num_rows();

7. Thêm dữ liệu
$this->db->insert("tên_bảng","mảng_dữ_liệu");

8. Sửa dữ liệu
$this->db->update("tên_bảng","mảng_dữ_liệu");

9. Xóa dữ liệu
$this->db->delete("tên_bảng");
Hướng dẫn các bạn sử dụng Zend Studio

Hướng dẫn các bạn sử dụng Zend Studio

Zend Studio là môi trường phát triển kết hợp (IDE) duy nhất dành cho các chuyên viên thiết kế chuyên nghiệp để hoàn thiện tất cả những phần phát triển cần thiết cho chu kỳ đầy đủ của ứng dụng PHP. Thông qua một bộ công cụ toàn diện gồm editing, debugging, analysis, optimization and database tools, Zend Studio đẩy mạnh các chu kỳ phát triển và làm đơn giản những đề án phức tạp.
- Làm tăng hiệu suất làm việc của bạn
– Phát triển một cách nhanh chóng và thông minh hơn với Syntax Highlighting.
Và bây giờ tôi sẽ hướng dẫn các bạn sử dụng zend studio
  1. Để bắt đầu hoc php, trước tiên khởi tạo một project mới :
Bạn vào File-> new->Local PHP Project
Bạn điền tên project và chọn đường dẫn đến nơi bạn muốn đặt project
Để tạo một file php bạn click chuột phải vào tên project ->New ->PHP File
Làm tương tự khi muốn tạo file .html, .css,….
  1. Quản lý một project đã có sẵn :
Sau đó bạn điền tên và chọn đường dẫn
  1. Sử dụng menu
  • Bạn vào Search -> PHP và nhập các tiêu chí bạn muốn tìm kiếm.
  • Bạn vào Run -> debug và chọn để debug file bạn đang xây dựng.
  • Bạn vào Source-> format để định dạng lại code cho dễ nhìn
Sử dụng zend studio thật đơn giản phải không bạn. Bây giờ bạn bắt đầu sử dụng thôi nào !


Chúc các bạn thành công!

Tìm hiểu Controller trong Laravel 4.X

Tìm hiểu Controller trong Laravel 4.X

Ở bài trước chúng ta đã được tìm hiểu về Route và View trong Laravel. Tiếp tục chuỗi bài tìm hiểu về Laravel Framework tôi xin giới thiệu tới các bạn phần tiếp theo Tìm hiểu Controller trong Laravel 4.X

Cũng ở bài trước chúng ta đã thây được sự linh hoạt và mạnh mẽ đến từ route trong Laravel, nó cho phép chúng ta thực thi trực tiếp một quá trình thông qua route mà không cần xử lý bởi Controller. Tuy nhiên đối với các dự án có độ lớn và phức tạp cao thì chúng ta nên thao tác chúng với Controller giúp cho việc xây dựng và vận hành một cách linh hoạt cũng như sự dễ dàng phát triển sau này.

Điều đầu tiên khi làm việc với Controller trong Laravel ta tạo một file trong thư mục app/controllers theo cấu trúc tên file như sau: tên_fileController.php

Ví dụ: tintucController.php, sanphamController.php …

Để hiểu rõ hơn quá trình làm việc trong Controller ta đi làm một ví dụ như sau. Tạo một file có tên là WebController.php với nội dung :
<?php
 Class WebController extends BaseController{
   public function index(){
     $data = array(
       "name"=>"Thế Giới WEB",
       "website"=>"thegioiweb.net.vn"
     );
     return view::make(webView, $data);    
   }
 }
?>
Ở đây chúng ta đã tạo ra một lớp controller với tên là WebController được kế thừa từ lớp ban đầu BaseController. Trong lớp WebController ta xây dựng phương thức index. Và trong phương thức index ta gọi đến views có tên là webView và tham số truyền là mảng $data.

Tiếp đến ta tạo một file view có tên là webView.php có nội dung như sau :
<?php
 echo $name."---".$website;
?>
Sau đó ta khai báo trong file routes.php như sau :
<?php
 Route::get("web","WebController@index");
?>
Và truy cập với đường dẫn http://localhost/laravel/public/web

Kết quả
Thế Giới WEB---thegioiweb.net.vn
Trong trường hợp bạn muốn truyền giá trị từ route tới controller ta sẽ thực thi như sau:

Trước hết, trong quá trình lap trinh PHP này,  ta cần khai báo trong Route đối số ta mong muốn:
Route::get("web/content/{webName}","WebController@welcome");
Sau đó ta tạo phương thức welcome() với đối số là $website như sau:
<?php
class WebController extends BaseController{
    public function welcome($website){
        return "WELCOME TO ".$website;
    }
}
Ta chạy đường dẫn: localhost/laravel/public/web/welcome/thegioiweb.net.vn

Kết quả
WELCOME TO thegioiweb.net.vn

Nguồn: the gioi web
Tìm hiểu Route và View trong Laravel 4.X

Tìm hiểu Route và View trong Laravel 4.X

Trong phần này chúng ta sẽ đi tìm hiểu Route và View trong Laravel 4.X. Nếu như các bạn đã từng làm việc với một Framework bất kỳ thì chắc hẳn không còn xa lạ gì với khái niệm Route và View nữa. Tuy nhiên trong Laravel thì Route có sức mạnh hơn nhiều, bạn có thể dễ dàng thao tác trực tiếp với route mà không cần thiết phải tạo Controller.

Route trong Laravel

Để làm việc được với route trước hết ta tiếp xúc chúng với công thức cơ bản như sau:
Route::method('tên_định_danh', tham_số);

Trong đó:

  • tên_định_danh :  là đường dẫn trong ứng dụng mà người dùng chỉ định.
  • tham_số : là thao tác muốn thực thi với tên định danh trên.
  • method : là một trong các phương thức được định nghĩa dưới đây
  • post: dành cho các thao tác lấy dữ liệu từ form.
  • get: dành cho các thao tác truy cập thông thường tương đương với request cơ bản trong PHP.
  • put: dành cho thao tác lấy dữ liệu từ form (nhưng là cập nhật bản ghi).
  • delete: thao tác xóa bỏ.
  • any: là sự tổng hợp của các thao tác ở trên.


Ví dụ: Ghi thêm nội dung như sau vào file app/routes.php
Route::get("web","TGWController@show");
Câu lệnh trên sẽ được hiểu khi ta truy cập đường dẫn http://localhost/laravel/public/web thì nó sẽ gọi đến controller “TGW” và action “show”

Nếu muốn gửi kèm tham số thì cũng rất đơn giản như cú pháp dưới
Route::get("web/{param}", function($param){
   echo "Chào mừng bạn đến với ".$param;
});
Sau đó ta truy cập vào thanh địa chỉ duyệt web và nhập nội dung: http://localhost/laravel/public/web/thegioiweb.net.vn

Kết quả
Chào mừng bạn đến với thegioiweb.net.vn
Lưu ý:

Đôi khi tham số truyền vào của bạn không chắc chắn sẽ tồn tại thì ta sẽ sử dụng dấu (?) đằng sau tham số. Tuy nhiên đây cũng là một điểm nhạy cảm để hacker có thể tấn công website của chúng ta. Do vậy cần thật sự cẩn thận khi học php và khéo léo khi sử dụng đối số truyền vào trong quá trình làm dự án.

View trong Laravel

Để sử dụng views trong Laravel ta sử dụng cú pháp sau:
return View::make("tên_view",tham_số);

Trong đó:

  • tên_view: là tên file view cần triệu gọi (không có phần mở rộng)
  • tham_số: là tham số truyền sang view, có thể có hoặc không.


Ví dụ: Tạo một file view có tên là webView.php và triệu gọi vào như sau:
Route::get("web",function(){
    return View::make("webView");
});
Nếu muốn truyền tham số vào view ta có thể sử dụng một trong những cách sau:

1. Sử dụng tham số truyền là một mảng đơn thuần
Route::get("web",function(){
    $data['webName']= "Thế Giới WEB";
    return View::make("webView",$data);
});
2. Sử dụng phương thức with()
Route::get("web",function(){
    return View::make("webView")->with("webName"=>"Thế Giới WEB");
});
3. Sử dụng hàm compact()
Route::get("web",function(){
    $webName = "Thế Giới WEB";
    return View::make("webView",compact("webName"));
});
Bạn có thể lựa chọn 1 trong 3 cách trên để truyền tham số sang View (khuyến khích sử dụng cách 1 và 3). Sau đó bạn có thể sử dụng tham số được truyền qua View một cách tùy ý. Giả sử tôi chỉ dùng để in ra giá trị của biến được truyền sang View , thì ở views tôi tạo một file có tên là webView.php với nội dung như sau:
<?php
 echo "Chào mừng bạn đến với ".$webName;
?>

 Kết quả
Chào mừng bạn đến với Thế Giới WEB
Kiểm tra tính hợp lệ của dữ liệu trong CakePHP Framework

Kiểm tra tính hợp lệ của dữ liệu trong CakePHP Framework

Kiểm tra tính hợp lệ của dữ liệu là một quá trình vô cùng quan trọng đối với các ứng dụng website có sự tương tác dữ liệu giữa người dùng và hệ thống. Cũng giống như các Framework khác thì trong CakePHP Framework cũng cho phép chúng ta kiểm tra tính hợp lệ của dữ liệu thông qua các hàm được xây dựng sẵn.

hình ảnh minh họa


Sau đây, chúng ta sẽ đi tìm hiểu quá trình Kiểm tra tính hợp lệ của dữ liệu trong CakePHP Framework (Data Validation). Để sử dụng Data Validation thì chúng ta phải có 2 thành phần chính :

Thành phần Form Helper sử dụng cho việc tạo Form :
<?php
  var $helpers = array("Html", "Form")
?>
Thành phần namespace validate : sử dụng các tập luật để validation dữ liệu :
<?php
  var $validate = array(tập_luật);
?>

 Xây dựng ứng dụng Data Validation
Tạo một controller valid trong thư mục app/controllers có tên là valids_controller.php
<?php
  class ValidsController extends AppController{
  var $name = "Valids";
  var $helpers = array ('Html','Form');
  var $components = array('Session');
?>
Tạo một model trong thư mực app/model có tên là valid.php
<?php
  class valid extends AppModel{
  var $useTable = false; // không sử dụng bảng trong CSDL
  var $validate = array(); // name space mặc ðịnh khi sử dụng datavalidation
?>
Sử dụng điều kiện kiểm tra cho các trường

Giả sử đưa ra yêu cầu tạo 1 form nhập liệu với 2 trường với các điều kiện sau:

– title : không được phép rỗng

– info : không được phép rỗng

Ta tạo một function valid1() để thực thi :
<?php
  class ValidsController extends AppController{
  var $name = "Valids";
  var $helpers = array ('Html','Form');
  var $components = array('Session');

  function valid1(){
    $this->Valid->set($this->data);
    if($this->Valid->valid_01()==TRUE){
    $this->Session->setFlash("Data is avaliable !");
  }else{
    $this->Session->setFlash("Data is not avaliable !");
 }
?>

Để kích hoạt chức năng Data Validation ta sử dụng cú pháp
$this->Valid->set($this->data)

Sau đó model valid sẽ gọi hàm valid_o1() để kiểm tra điều kiện cho các trường tương ứng.
Trong thư mục app/views/valid ta tạo một file có tên là valid1.ctp có nội dung như sau :
<h1>Add Post</h1>
<?php
  echo $this->Form->create('Valid', array('action' => 'valid1'));
  echo $this->Form->input('title');
  echo $this->Form->input('info');
  echo $this->Form->end('Register');
?>
Để validate dữ liệu chúng ta sử dụng namespace validate ($this->validate) để gán tập luật cho các trường
$this->validates($this->validate)
Sử dụng từ khóa rule để chỉ tập luật và từ khóa notEmpty để chỉ không được rỗng. Một số tập luật thông dụng

§ ‘rule’ => ‘alphaNumeric’ : chỉ có số hoặc chữ
§ ‘rule’ => array(‘between’, 6, 32) : giá trị nằm trong khoản từ 6-32
§ ‘rule’ => array(‘comparison’, ‘>=’, 6) : giá trị phải lớn hơn 6
§ ‘rule’ => array(‘email’, true) : định dạng email
§ ‘rule’ => array(‘extension’, array(‘gif’, ‘jpeg’, ‘png’, ‘jpg’)) : dành cho upload file , kiểm tra extension
§ ‘rule’ => array(‘minLength’, 8) : độ dài nhỏ nhất là 8
§ ‘rule’ => array(‘maxLength’, 8) : độ dài tối đa là 8
§ ‘rule’ => ‘numeric’ : dữ liệu nhập là số
§ ‘rule’ => ‘notEmpty’ : dữ liệu không được bỏ trống
§ ‘rule’ => ‘url’ : định dạng địa chỉ url
 Sử dụng nhiều tập luật cho một trường

Như phần trên, trong quá trình lap trinh PHP chúng ta chỉ kiểm tra một điều kiện không rỗng đối với trường title và trường info. Giả sử chúng ta muốn kiểm tra nhiều hơn 1 điều kiện như :

– Trường title: không được rỗng, số ký tự lớn hơn 8 và chỉ có số hoặc chữ

Ta tùy chỉnh lại file valid.php trong model như sau:
<?php
class valid extends AppModel{
  var $useTable = false;
  var $validate = array();

  function valid_01(){
    $this->validate = array(
     "title"=>array(
       "rule1" => array(
           "rule" => "notEmpty",
           "message" => "Title không được để trống",
        ),
       "rule2" => array(
           "rule" => array('minLength', 8),
           "message" => "Số ký tự phải lớn hơn 8",
        ),
        "rule3" => array(
           "rule" => array('alphaNumeric'),
           "message" => "Title chỉ bao gồm số hoặc chữ",
        ),
     ),
    );
  if($this->validates($this->validate))
   return TRUE;
  else
   return FALSE;
 }
?>
Trong nhiều trường hợp các rule có sẵn không thể giải quyết được yêu cầu đặt ra, lúc này chúng ta phải sử dụng đến biểu thức chính quy (Regular Expression)

Ví dụ: Điều kiện cho title là số ký tự lớn hơn 8 và chỉ bao gồm chữ hoặc số
'rule' => '/^[A-z0-9]{8,}$/'
Sử dụng callback function

Callback function là thay vì sử dụng các từ khóa có sẵn hay biểu thức chính quy để kiểm tra quy luật thì ta còn có thể viết một hàm để kiểm tra các quy luật đó.

Bắt đầu viết ứng dụng với Call Back function :

-Yêu cầu tạo 1 form nhập liệu với 1 field với các tập luật được mô tả :

– Username : Không được rỗng, dữ liệu nhập vào hợp lệ là chuỗi “admin” nếu không thì báo lỗi, dùng hàm checkUsername để kiểm tra tính hợp lệ đó.

Trong Controller Valid ta thêm hàm valid2 :
<?php
class ValidsController extends AppController{
 var $name = "Valids";
 var $helpers = array ('Html','Form');
 var $components = array('Session');

 function valid2(){
  $this->Valid->set($this->data);
  if($this->Valid->valid_02()==TRUE){
   $this->Session->setFlash("Data is avaliable !");
  }else{
   $this->Session->setFlash("Data is not avaliable !");
  }
 }
?>
Trong thý mục app/views/valids/ tạo file valid2.ctp :
<h1>Add Post</h1>
<?php
echo $this->Form->create('Valid', array('action' => 'demo04'));
echo $this->Form->input('username');
echo $this->Form->end('Check');
?>
Trong model Valid thêm hàm valid_02() và hàm checkUsername()

<?php
class valid extends AppModel{
  var $useTable = false;
  var $validate = array();

  function valid_02 (){
   $this->validate = array(
    "username" => array(
    'rule' => 'checkUsername',
    'message' => 'Username is not avaliable',
   ),
  );
  if($this->validates($this->validate))
   return TRUE;
  else
   return FALSE;
  }

  function checkUsername(){
   if($this->data['Valid']['username']=="admin"){ // so sánh dữ liệu nhập từ form có tên username
    return true;
   }
   else{
    return false;
   }
  }
?>
Nguồn: the gioi web
Thao tác trên cơ sở dữ liệu trong CakePHP Framework

Thao tác trên cơ sở dữ liệu trong CakePHP Framework

Trong mỗi một Framework khác nhau thì chúng sẽ đưa ra cách thao tác với cơ sở dữ liệu khác nhau. Và trong phần này tôi xin được hướng dẫn các bạn Thao tác trên cơ sở dữ liệu trong CakePHP Framework.

Như tất cả chúng ta đã biết, để xây dựng ra một website thì một quá trình đầu tiên là phải phân tích và xây dựng cơ sở dữ liệu. Để từ đó, trong quá trình lap trinh web, ta có thể  thao tác với cơ sở dữ liệu đó một cách tùy ý, phụ thuộc vào chức năng của chúng ta cần xử lý.

Để thao tác với cơ sở dữ liệu thì tôi giả sử có một bảng trong cơ sở dữ liệu như sau (tên bảng là infos)


Ta tạo file info.php trong thư mục app/models với nội dung sau:
<?php
  Class Info extends AppModel{
    var $name = "Info"; // Tên của model info
  }
?>
Tạo tiếp file infos_controller trong thư mục app/controllers với nội dung sau:
<?php class InfosController extends  AppController{
   var $name = "Infos"; // tên của Controller Info
   function get_all(){
        $data = $this->Info->find("all");
        $this->set("data",$data);
    }
}
?>
Trong đó ta để ý tới câu lệnh $this->Info->find(“all”) có chức năng gọi tới model Info và lấy tất cả dữ liệu trong bảng infos

Truy vấn có điều kiện

Trong controller InfosController ta tạo thêm một function get_cond() có chức năng truy vấn theo điều kiện

Ví dụ: Chúng ta sẽ sử dụng điều kiện để lấy ra những bản ghi có số điện thoại bắt đầu là 09
<?php class InfosController extends  AppController{
   var $name = "Infos"; // tên của Controller Info
   public function get_cond(){
     $sql = array(
       "condition" => array("phone LIKE" => "09%"),
     );
     $data = $this->Info->find("all", $sql);
     $this->set("data", $data);
   }
}
?>

* Chúng ta cũng có thể sử dụng những câu truy vấn hoàn chỉnh (không sử dụng hàm hỗ trợ)
<?php
 class InfosController extends  AppController{
 
   var $name = "Infos"; // tên của Controller Info
   public function get_cond(){
     $sql = "SELECT * FROM infos WHERE phone LIKE '09%' ";
     $data = $this->Info->query($sql);
     $this->set("data", $data);
   }
}
?>

Component trong CakePHP Framework

Component trong CakePHP Framework

Component trong CakePHP Framework là những thành phần mở rộng. Cho phép người sử dụng tùy biến và sử dụng nó linh hoạt.Ví dụ một số component trong CakePHP Framework mà chúng ta thường dùng như: ACL (phân quyền), mail, time, security…

Ngoài ra, CakePHP cũng cho phép người sử dụng tùy biến hoặc viết riêng một component để phục vụ cho ứng dụng của mình. Để sử dụng các component trong CakePHP Framework, trong controller ta khai báo :
<?php
   var $components=array('Acl',’Mail’);
?>
Cách đặt tên cho Component
Tên class helper = tên component + "component"

Ví dụ: Muốn tạo một component có tên là Demo thì class tương ứng là DemoComponent và tên file là demo.php được đặt trong thư mục app/controllers/components. Và chức năng của component này là loại bỏ dấu tiếng Việt các bài viết mà tôi nhận được từ user. Ta làm như sau :

<?php
 class DemoComponent extends Object{
    function initialize(&$controller, $settings = array()) {
        $this->controller =& $controller;
    }
    function startup(&$controller) {
    }
    function beforeRender(&$controller) {
    }
    function shutdown(&$controller) {
    }
    function beforeRedirect(&$controller, $url, $status=null, $exit=true) {
    }
    function redirectSomewhere($value) {}

   function unicode_convert($str){
    if(!$str) return false;
    $unicode = array(
      'a'=>array(
      'á','à','ả','ã','ạ','ă','ắ','ặ','ằ','ẳ','ẵ','â','ấ','ầ','ẩ','ẫ','ậ'),
      'A'=>array(
      'Á','À','Ả','Ã','Ạ','Ă','Ắ','Ặ','Ằ','Ẳ','Ẵ','Â','Ấ','Ầ','Ẩ','Ẫ','Ậ'),
      'd'=>array('đ'),
      'D'=>array('Đ'),
      'e'=>array('é','è','ẻ','ẽ','ẹ','ê','ế','ề','ể','ễ','ệ'),
      'E'=>array('É','È','Ẻ','Ẽ','Ẹ','Ê','Ế','Ề','Ể','Ễ','Ệ'),
      'i'=>array('í','ì','ỉ','ĩ','ị'),
      'I'=>array('Í','Ì','Ỉ','Ĩ','Ị'),
      'o'=>array(
      'ó','ò','ỏ','õ','ọ','ô','ố','ồ','ổ','ỗ','ộ','õ','ớ','ờ','ở','ỡ','ợ'),
      '0'=>array(
      'Ó','Ò','Ỏ','Õ','Ọ','Ô','Ố','Ồ','Ổ','Ỗ','Ộ','Õ','Ớ','Ờ','Ở','Ỡ','Ợ'),
      'u'=>array('ú','ù','ủ','ũ','ụ','ý','ứ','ừ','ử','ữ','ự'),
      'U'=>array('Ú','Ù','Ủ','Ũ','Ụ','Ý','Ứ','Ừ','Ử','Ữ','Ự'),
      'y'=>array('ý','ỳ','ỷ','ỹ','ỵ'),
      'Y'=>array('Ý','Ỳ','Ỷ','Ỹ','Ỵ'),
      '-'=>array(' ','.','/',''','’','(',')',',','!','"','"','"','%','&','@','#','$'),
    );
   foreach($unicode as $nonUnicode=>$uni){
    foreach($uni as $value)
     $str = str_replace($value,$nonUnicode,$str);
    }
     return $str;
   }
}
?>

Tiếp theo tạo 1 Controller tên Testdemos (app/controllers/ testdemos _controller.php) có nội dung như sau :
<?php
 class TestdemosController extends AppController {
    var $components = array("Demo");
   
    function test_component(){
        $string = "Thế Giới WEB - thegioiweb.net.vn";
        $data = $this->Demo->unicode_convert($string);
        $this->set("data",$data);
 }
?>

Tạo file test_component.ctp trong thư mục app/views/testdemos có nội dung hiển thị dữ liệu từ controller testdemo_controller.php
<?php
  echo $data;
?>
Truy cập tới controller testdemos/test_component để kiểm tra kết quả.

Lưu ý: Khi lập trình PHP, trong các component được khai báo trong controller nào thì chỉ được sử dụng trong controller đó. Tuy nhiên để sử dụng chúng ở mọi nơi thì ta giải quyết như sau:

Tạo file app_controller.php đặt trong thư mục app với nội dung :
<?php
  class AppController extends Controller {
     var $components=array('Acl',’Mail’);
}

Mọi thứ đặt trong AppController sẽ có tác dụng trên toàn bộ các Controller khác, do đó ta chỉ cần khai báo :
var $components=array('Acl',’Mail’);

Thứ Tư, 17 tháng 6, 2015

Codeigniter framework

Codeigniter framework

Tiếp theo bài này thì tôi sẽ hướng dẫn bạn làm sao để tương tác cơ sở dữ liệu trong tầng model như thế nào, bài trước thì tôi đã hướng dẫn các bạn tìm hiểu qua về quy trình làm việc trên view của codeigniter framework . Để từ đó vận dụng tốt chúng trong quá trình viết các ứng dụng sau này. trong lập trình php.

Đầu tiên bạn phải hiểu model là gì? tại sao phải dùng model? Model là tầng xử lý những tác vụ liên quan đến tương tác cơ sở dữ liệu từ những yêu cầu của controller hay nói cách khác thì model là tầng trung gian dùng để kết nối cơ sở dữ liệu dựa trên nhưng yêu cầu từ tầng controller. Model xử lý và trả về kết quả dưới dạng một mảng dữ liệu, khi đó thông qua view ta sẽ đẩy nội dung của mảng dữ liệu ấy ra bên ngoài. Việc tách biệt tầng model có rất nhiều thuận lợi, trước là dễ quản lý sau là dễ nâng cấp và phát triển trong tương lai của mã nguồn.

Model trong codeigniter framework cũng vậy, cũng có những cách tương tác riêng biệt. trong bài này tôi  sẽ hướng dẫn các bạn những tháo tác chính trong xử lý model như thế nào.

[codesyntax lang=”php”]
&lt;?php
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'vertrigo';
$db['default']['database'] = 'webtintuc';//là tên cơ sở dữ liệu
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
?&gt;
[/codesyntax]

Nguồn: the gioi web
 Sử dụng Layout trong CakePHP Framework

Sử dụng Layout trong CakePHP Framework

Trong CakePHP Framework khi  viết một ứng dụng thì mặc định CakePHP Framework đã xây dựng cho chúng ta giao diện sẵn . Tuy nhiên tùy theo nhu cầu , xu hướng…  chúng ta muốn tùy biến hoặc tạo riêng cho mình một giao diện. Thì đó là lúc bạn cần phải Sử dụng Layout trong CakePHP Framework và cách áp dụng 1 Helper CakePHP Framework vào ứng dụng của mình.

Chắc hẳn những ai đã từng làm việc với layout đều biết trong một website không phải toàn bộ giao diện lúc nào cũng thay đổi, nó bao gồm những thành phần cố định và thành phần động. Trong CakePHP chúng ta sẽ xử lý các thành phần cố định thông qua một class Helper. Và thành phần động sẽ được xử lý qua controller.
hình ảnh minh họa


Để hiểu rõ hơn phần này và thành thạo lap trinh web , chúng ta sẽ cùng đi xây dựng một layout trong CakePHP. Chuẩn bị một số file như sau :
  • templates_controller.php nằm trong app/controller/templates.
  • index.ctp và view.ctp nằm trong app/views/templates.
  • common.php nằm trong app/views/helpers.
  • templates.ctp
  • style.css nằm trong  app/webroot/css.
Tạo file app_controller có nội dung:
<?php
  class AppController extends Controller {
  }
?>

Tạo file common.php có nội dung:
<?php
 class CommonHelper extends HtmlHelper {
  // Hàm tạo menu
  function create_menu(){
    $menu  = "<ul>";
    $menu .= "<li>".$this->link("CodeIgniter", array(
                                      "controller"=>"templates",
                                      "action"=>"view",
                                      1))."</li>";
    $menu .= "<li>".$this->link("CakePHP", array(
                                      "controller"=>"templates",
                                      "action"=>"view",
                                       2))."</li>";
    $menu .= "<li>".$this->link("Zend", array(
                                      "controller"=>"templates",
                                      "action"=>"view",
                                      3))."</li>";
    $menu .= "</ul>";
    return $menu;
  }
 
  //Hàm tạo các thành phần cho header và footer
  function general(){
    $data = array(
                    "header" => "thegioiweb.net.vn",
                    "footer" => "Copyright 2015 © | Thế Giới WEB",
                );
    return $data;
    }
?>

Tạo file templates_controller.php có nội dung:

<?php
class TemplatesController extends AppController {
    var $layout = "template"; // load file chứa nội dung layout : views/layouts/template.ctp
    var $helpers = array("Html","Common"); // Thành phần Helper Common được gọi để tạo menu,header,footer trong view
   
    function  index(){
        $this->set('title_for_layout', 'Templates');
        $this->set("content","Thế Giới WEB");
    }
   
    function view($id){
        switch($id){
            case 1 :{
                $this->set('title_for_layout', 'CodeIgniter FrameWork');
                $this->set("content","CodeIgniter FrameWork");
            }
            break;
            case 2 :{
                $this->set('title_for_layout', 'CakePHP FrameWork');
                $this->set("content","CakePHP FrameWork");
            }
            break;
            case 3 :{
                $this->set('title_for_layout', 'Zend Framework');
                $this->set("content","Zend Framework");
            }
            break;
            default :
                $this->set("content","Framwork");
            break;
        }
    }        
}
?>

Tạo file layout template.ctp (app/views/layouts/template.ctp) là layout chứa các phần nội dung cố định và động:
<!DOCTYPE html>
<html>
 <head>
   <meta charset=utf-8" />
   <title><?php echo $title_for_layout;?></title>
   <?php echo $this->Html->css("style"); // link oi file style.css (app/webroot/css/style.css)?>
   <?php $general = $this->Common->general(); // Lấy các giá trị của thành phần tĩnh : header,footer ?>
 </head>
 <body>
   <div id="top">
    <center><h2><?php echo $general['header']; ?></h2></center>
   </div>
   <div id="main">
    <div id="menu">
        <?php echo $this->Common->create_menu(); // goi ham tao menu tu common helper?>
    </div>
    <div id="content">
        <h1><?php echo $content; // Thành phần động ?></h1>
    </div>
   </div>
   <div id="footer">
    <center><?php echo $general['footer'];?></center>
   </div>
 </body>
</html>

Tạo file style.css có nội dung
body {
 margin: auto;
 width: 1000px;
 font-family: Verdana, Geneva, sans-serif;
}
#top {
 float: left;
 width: 1000px;
 height: 100px;
 background-color: #F36;
 color: #FFF;
}
#main {
 float: left;
 width: 1000px;
}
#menu {
 float: left;
 width: 200px;
 background-color: #F96;
}
#menu ul {
 margin: 0px;
}
#menu a {
 color: #FFF;
 font-size: 12px;
}
#content {
 float: left;
 width: 800px;
}
#content h1 {
 font-size: 18px;
 color: #0CF;
 padding-left: 50px;
}
#footer {
 float: left;
 width: 1000px;
 height: 50px;
 background-color: #96C;
 font-size: 12px;
 font-weight: bold;
 color: #FFF;
}

Do sử dụng layout nên khi action index() được gọi , nó sẽ load file index.ctp và tự động nạp file layout vào.
 Làm việc với View trong CodeIgniter Framework

Làm việc với View trong CodeIgniter Framework

Trong bài trước chúng ta đã có những nội dung khái quát nhất về CodeIgniter Framework .  Trong bài này chúng ta sẽ đi tìm hiểu cách làm việc với View trong CodeIgniter Framework.


Vậy view là gì và view để làm gì?

View có thể hiểu đơn giản là các giao diện (phần hiển thị mà người dùng thấy được), tạo ra tương tác giữa người dùng và hệ thống.

Cú pháp sử dụng view
$this->load->view('fileView');
Trong đó:
fileView : là tên file chứa nội dung cần gọi.

Ví dụ 1: Gọi view có tên là myView.php vào trong file inchuoi.php
<?php
 class Inchuoi extends CI_Controller{
   function index(){
     echo "Thế Giới WEB";
     $this->load->view('myView.php');
   }
 }
?>
Với nội dung file myView
<?php
 echo "Phần View";
?>
 Kết quả
Thế Giới WEB
Phần View
Như vậy ta thấy nội dung của file myView đã được load vào trong file inchuoi.php

Truyền tham số sang View

Để truyền tham số sang View ta cần lưu trữ dữ liệu truyền đó dưới dạng mảng. Và sử dụng cú pháp
$this->load->view('fileView', $mang);
Trong đó: $mang là mảng lưu trữ dữ liệu cần truyền sang View

Lưu ý: CodeIgniter Framework sẽ tự nhận key của biến mảng truyền sang view thành một biến bình thường.

Ví dụ 2: Truyền tham số có giá trị thegioiweb.net.vn sang View (myView.php) và in ra màn hình.
<?php
 class Inchuoi extends CI_Controller{
   function index(){
     echo "Thế Giới WEB";
     $data = array(
       "web"=>"thegioiweb.net.vn"
     );
     $this->load->view('myView.php', $data);
   }
 }
?>
Trong file myView.php ta xử lý như sau :
<?php
 echo $web;
?>
Kết quả
Thế Giới WEB thegioiweb.net.vn
Định dạng lại đường dẫn css, javascrip và hình ảnh trong View

Thông thường khi lập trình web, chúng ta hay sử dụng đường dẫn tương đối cho các liên kết css, js và hình ảnh. Do vậy khi sử dụng trong controller sẽ bị hiểu sai lệch đường dẫn

Giả sử đường dẫn link css ban đầu
<link rel="stylesheet" type="text/css" href="css/style.css" />
Khi đó sẽ được hiểu khi ta chạy trong controller inchuoi/index như sau :
http://localhost/democi/index.php/inchuoi/css/style.css
Để giải quyết vấn đề trên ta sử dụng thư viện helper trong CodeIgniter

Bước 1:

Trong file config.php trong thư mục application/config ta sửa dòng
$config['base_url'] = '';
thành
$config['base_url'] = 'http://localhost/democi';
Bước 2: Load thư viện helper vào trong file controller sử dụng cú pháp
$this->load->helper('url');
Bước 3: Định dạng lại đường dẫn file css như sau
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>/css/style.css" />
Giới thiệu CakePHP Framework

Giới thiệu CakePHP Framework

Trong các phần trước về PHP Framework chúng ta đã lần lượt được làm quen với CodeIgniter Framework và Laravel Framework 4.X thì chắc hẳn các bạn cũng đã hiểu phần nào về một PHP Framework và cách sử dụng chúng. Hôm nay tôi xin được giới thiệu CakePHP Framework tới các bạn, đây cũng là một PHP Framework mã nguồn mở, miễn phí và khá phổ biến hiện nay.


Như các Framework  khác , CakePHP cũng cần trang bị một lượng kiến thức về :

  • PHP cơ bản
  • Mô hình MVC
  • Lập trình hướng đối tượng


Một số tính năng của CakePHP Framework

  • Nguồn mở, miễn phí, có cộng đồng sử dụng và hỗ trợ rộng lớn
  • Tương thích PHP4 và PHP5
  • Mô hình MVC Đa ngôn ngữ
  • Sinh code tự động
  • Caching
  • Phân quyền (ACL)
  • Kiểm tra ràng buộc dữ liệu
  •  Xây dựng nhiều thư viện hỗ trợ cho View như: Ajax, HTML Form, Javascript…
  • Xây dựng nhiều thư viện hỗ trợ cho Controller: Email, Security, Session, Cookies, Request Handling


  • Dễ dàng viết thêm thư viện hỗ trợ, liên kết với ứng dụng khác (thông qua vendors)
  • Đa giao diện
  • Hỗ trợ nhiều hệ quản trị CSDL

Cấu trúc thư mục trong CakePHP Framework
- Tùy vào các phiên bản khác nhau mà CakePHP có các nâng cấp, sửa đổi khác nhau dẫn đến cấu trúc thư mục cũng khác nhau. Trong phần này tôi giới thiệu đế các bạn CakePHP Framework phiên bản 1.3.6.
Để lập trình web tốt, chúng ta sẽ quan tâm lớn đến 4 thư mục sau:

  • app : là nơi chứa code của bạn (nơi làm việc chính).
  • cake : là nơi chứa mã nguồn của CakePHP. Bạn không nên chỉnh sửa các files trong thư mục này nếu bạn không hiểu rõ về chúng.
  • vendors : chứa ứng dụng của bên thứ 3.
  • plugins : chứa các thành phần mở rộng dùng cho ứng dụng.

Trong thư mục app bao gồm:

  • Config : Thư mục chứa các cài đặt ban đầu như kết nối database, bootstrap …
  • Controller : Thư mục chứa các controllers và các components.
  • Locale : Thư mục chứa các file hỗ trợ cho đa ngôn ngữ.
  • Model : Thư mục chứa các Models.
  • Plugin : Thư mục chứa các plugins.
  • tmp : Thư mục chứa các dữ liệu tạm thời.
  • Vendor: Thư mục chứa các ứng dụng của bên thứ 3.
  • View : Thư mục chứa các thành phần hiển thị.
  • webroot : Thư mục gốc của ứng dụng , chứa các hình ảnh, css và javascript.

Trước khi sử dụng chúng ta cần làm một vài thao tác sau:

Mở file app/config/core.php
– Thay đổi giá trị của dòng
Configure::write('Security.salt','DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi2010');
– Thay đổi giá trị của dòng
Configure::write('Security.cipherSeed', '768593096574535424967496836452011');
– Mở file app/config/database.php điền như sau (Đây là quá trình kết nối tới cơ sở dữ liệu “cakephp_DB“)
var $default = array(
 'driver' => 'mysql',
 'persistent' => false,
 'host' => 'localhost',
 'login' => 'root',
 'password' => '',
 'database' => 'cakephp_DB',
 'prefix' => '',
);
Tìm hiểu Filter trong Laravel 4.X

Tìm hiểu Filter trong Laravel 4.X

Trong bài trước chúng ta đã đi tìm hiểu Controller trong Laravel. Tiếp theo chúng ta sẽ đi Tìm hiểu Filter trong Laravel 4.X. Vậy Filter là gì và dùng để làm gì?

Filter là một bộ lọc, nó có chức năng lọc dữ liệu từ phía người dùng trước hoặc sau khi nó chạm tới Route. Do đó, nếu bạn tận sử dụng filter một cách thông minh thì website của bạn sẽ được an toàn hơn, điều này sẽ giúp bạn xử lý dữ liệu tối ưu hơn.

Filter trong Laravel sẽ cho phép bạn kiểm tra dữ liệu một cách độc lập sau đó lồng ghép một cách khéo léo vào route mà bạn mong muốn. Thì ngay khi request tới với route sẽ bị lọc bởi filter và xử lý. Nếu hợp lệ thì mới tiếp tục đi tới route còn nếu không thì sẽ thực thi một yêu cầu do bạn đặt ra.

Để thiết lập filter ta vào file filters.php và tạo filter với nội dung :
Route::filter('tên_filter',hàm_xử_lý);
Ví dụ: Kiểm tra thời gian hiện tại là buổi sáng hay buổi chiều ta có
Route::filter('check_time',function($route,$request){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Ta có hàm date(‘A’) sẽ trả về AM hoặc PM tùy theo thời gian của hệ thống. Ta sử dụng filter để lọc nếu thời gian là buổi sáng (AM) thì sẽ trả về ngay giá trị “Buổi sáng!” mà không đưa yêu cầu tới route.

Bây giờ ta tiến hành filter vào route

Mở file routes.php thêm vào cú pháp sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time","uses"=>"ThoigianController@showtime"));
Bạn thấy đấy, trong mảng đối số truyền vào, tôi thiết lập filter với khóa before chỉ tới check_time. Sau đó đẩy nó sang controller thoigian với action là showtime.

Tạo tiếp file ThoigianController.php với nội dung sau:
<?php
class ThoigianController extends BaseController{
    public function showtime(){
        return "Buổi chiều!";
    }
}
Truy cập tới địa chỉ: localhost/laravel/public/thoigian/showtime.

Lưu ý: Filter chia ra 2 loại là before và after.

  • Before: Nghĩa là request trước khi tới routing
  • After: Nghĩa là request sau khi tới routing.

Tuy nhiên, trong thực tế khi lập trình PHP, người ta thường sử dụng before là chính, còn after chỉ sử dụng thực hiện các công đoạn dọn dẹp. Ví dụ như hủy biến, hủy phiên làm việc,….

Truyền giá trị vào Filter

Để truyền giá trị vào filter ta sử dụng cú pháp
tên_Filter:giá trị

Ta có thể tùy chỉnh lại ví dụ ở trên như sau:
Route::filter('check_time',function($route,$request,$param){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Lưu ý: chúng ta có thêm một tham số $param trong function. Và $param này chính là giá trị chúng ta truyền từ quá trình thiết lập ở Route.

Giờ sửa lại phần routes.php như sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time:PM","uses"=>"ThoigianController@showtime"));
Và truy cập lại đường dẫn : localhost/laravel/public/thoigian/showtime để xem kết quả.

Nguồn: the gioi web
Giới thiệu CodeIgniter Framework

Giới thiệu CodeIgniter Framework

Giới thiệu CodeIgniter Framework. Trong bài này tôi xin được giới thiệu tới các bạn một Framework PHP phổ biến hàng đầu hiện nay đó là CodeIgniter Framework.

CodeIgniter Framework được ra mắt vào năm 2006 với mục đích hỗ trợ người dùng thông qua mô hình làm việc và các thư viện được xây dựng sẵn, giúp quá trình xử lý và kiểm soát nội dung của lập trình viên một cách tốt nhất. Phiên bản mới nhất hiện nay của CodeIgniter Framework là phiên bản 3.0 .

Một lưu ý với người bắt đầu sử dụng là phải có kiến thức về Lập trình hướng đối tượng và mô hình MVC. Bởi CodeIgniter Framework nói riêng và các Framework hiện nay nói chung thì đều được xây dựng hệ thống thư mục theo mô hình MVC và xử lý theo hướng đối tượng. Cách này sẽ giúp người sử dụng dễ dàng quản trị hệ thống chức năng của website và xử lý các chức năng đó một cách linh hoạt và uyển chuyển.

Để lap trinh web một cách có hiệu quả, các bạn nên biết một  số Framework để giảm lượng công việc. Dưới đây là cách cài đặt CodeIgniter Framework.

Cài đặt CodeIgniter Framework

Bước 1: Download CodeIgniter Framework tại http://www.codeigniter.com/download
Bước 2: Giải nén thư mục vừa download ta được các file như hình.
folder
Bước 3: Copy và Paste tất cả các file trên vào thư mục ở bước 4.

Bước 4: Tạo một thư mục mới với tên bất kỳ (nên đặt theo tên dự án của bạn, ở đây tôi đặt tên là “democi”) nằm trong thư mục htdocs của Xampp.

Bước 5: Kiểm tra quá trình cài đặt bằng cách vào thanh địa chỉ của trình duyệt web và truy cập tới : http://localhost/democi . Nếu hiển thị như hình dưới là bạn đã cài đặt thành công CodeIgniter Framework

Cấu trúc thư mục của CodeIgniter Framework

  • Hai thư mục chính trong CodeIgniter Framework là thư mục application và thư mục system.
  • Thư mục application là thư mục sẽ chứa các mã lệnh (code) do chúng ta tạo ra.
  • Thư mục system là thư mục chứa các thư viện ban đầu của CodeIgniter Framework.

Do vậy chúng ta chủ yếu làm việc với thư mục application. Cấu trúc thư mục application như sau:


Trong đó chúng ta cần quan tâm chính đến các phần sau:

  • Thư mục config lưu trữ các file cấu hình hệ thống (kết nối cơ sở dữ liệu, cấu hình ngôn ngữ, autoload, router…)
  • Thư mục Controllers lưu trữ các file điều khiển (controllers).
  • Thư mục Models lưu trữ các file thao tác với cơ sở dữ liệu.
  • Thư mục Views lưu trữ các file hiển thị.
  • Viết chương trình đầu tiên bằng CodeIgniter Framework

Ứng dụng đơn giản nhất là chúng ta sẽ in ra một chuỗi trong CodeIgniter. Ở đây tôi sẽ in ra chuỗi “Thế Giới WEB”.

Tạo một file với tên là inchuoi.php nằm trong thư mục Controllers có nội dung như sau:
<?php
class Inchuoi extends CI_Controller{  
    public function index(){
        echo "Thế Giới WEB";
    }
}
?>
Lưu ý :

Trong CodeIgniter

  • Trong phần controllers các lớp mới được tạo ra phải kế thừa từ lớp CI_Controller.
  • Tên của class phải trùng với tên file chứa nó. Và tên của class phải viết hoa chữ cái đầu tiên.
  • Sau đó chúng ta truy cập file trên theo đường dẫn http://localhost/democi/index.php/inchuoi

Lưu ý :  ở đường dẫn

  • Cấu trúc đường dẫn trong CodeIgniter Framework http://localhost/democi/index.php/controller/function
  • Để chạy một hành động trong một lớp ta phải thông qua file index.php. Đây là file điều hướng dữ liệu được gửi đi.
  • Trong một class thì function index được đặt làm mặc định, do vậy khi muốn gọi đến function index thì chúng ta không cần phải gọi trực tiếp đến function đó mà chỉ cần gọi từ lớp chứa nó.
Kết quả
Thế Giới WEB
Xây dựng một Helper trong CakePHP Framework

Xây dựng một Helper trong CakePHP Framework

Bạn muốn dùng một hàm bất kỳ do bạn xây dựng ở bất cứ nơi đâu trong view, bạn có thể viết hàm này trong một controller nào đó sau đó dùng requestAction để gọi hàm ra.

Tuy nhiên đây không phải là cách tốt, đó là chưa kể tới việc dùng nhiều requestAction sẽ làm cho ứng dụng bị chậm đi. Xây dựng một Helper trong CakePHP Framework là cách giải quyết vấn đề trên.

Muốn dùng helper nào thì trong Controller ta phải khai báo thông qua biến $helpers

PHP Code:
 <?php   var $helpers = array('Html','Form','Javascript'); ?>
Chúng ta bắt đầu đi viết một helper có tên là Common với tên file common.php trong thư mục app/views/helpers khi bắt đầu lập trình web .
Đặt tên helpers theo cú pháp sau:
Code:
 Tên lớp helper = tên helper + "Helper"

Như vậy ta sẽ có file common.php có nội dung như sau
PHP Code:
Tiếp đó ta tạo một file controller có tên là testcommon_controller.php để xử dụng lớp Helper vừa tạo

PHP Code:
 <?phpclass TestcommonsController extends AppController {    var $helpers = array('Common');         function test_helper(){        $this->render("test_helper");    }}?>
Và trong thư mục Views : app/views/testcommons ta tạo một file test_helper.ctp với nội dung như sau
PHP Code:
 <?php    echo $this->Common->create_random_string(10);?>
Lưu ý: Để dùng chung Helper trong nhiều Controller khác nhau chúng ta có thể khai báo $helpers trong app_controller nẳm trong thư mục app
PHP Code:
 <?phpclass AppController extends Controller {   var $helpers = array('Html', 'Form','Javascript','Ajax','Common');}?>
Và khi cần sử dụng thì ta chỉ việc khai báo
PHP Code:
 var $helpers = array('Html', 'Form','Javascript','Ajax','Common'); 

nguồn: the gioi web