Thursday, January 29, 2015

Routing mạnh mẽ, linh hoạt

Đơn giản, linh hoạt và bảo mật hơn với routing.
Định nghĩa rõ ràng phương thức tương tác, các biến, validate CSRF token, validate tham số trên URL ngay ở bước khai báo routing
Route::post('foo/bar', function()
{
    return 'Hello World';
});

Route::put('foo/bar', function()
{
    //
});

Route::delete('foo/bar', function()
{
    //
});
Regular Expression Parameter Constraints
Route::get('user/{name}', function($name)
{
    //
})
->where('name', '[A-Za-z]+');

Route::get('user/{id}', function($id)
{
    //
})
->where('id', '[0-9]+');
Passing An Array Of Constraints
Route::get('user/{id}/{name}', function($id, $name)
{
    //
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+'])
Defining Global Patterns
Định nghĩa Global Patterns để applied cho nhiều routing. Ví dụ dưới là định nghĩa biến số nguyên "id"
$router->pattern('id', '[0-9]+');
Route::get('user/{id}', function($id)
{
    // Only called if {id} is numeric.
});
Khai báo tên cho Routing, tiện lợi cho việc generate ra URL. 
Route::get('user/profile', ['as' => 'profile', 'uses' => 'UserController@showProfile']);
$url = route('profile');

$redirect = redirect()->route('profile');
Trên đây là 1 số tính năng thường dùng.
Tham khảo thêm tại đây: http://laravel.com/docs/master/routing

Caching Query

Cache kết quả truy vấn đơn giản với method "remember "
Ví dụ: cache kết quả 10 phút. Hệ thống sẽ sử dụng cache driver mà bạn cấu hình (file cache, database cache, memcache, redis, ...)
$users = DB::table('users')->remember(10)->get();

Source: http://laravel.com/docs/4.2/queries#caching-queries
Tìm hiểu thêm về Cache: http://laravel.com/docs/4.2/cache

Truy vấn nâng cao với Laravel query builder

Truy vấn CSDL thuận tiện và mềm dẻo, có thể hỗ trợ hầu hết các thao tác với CSDL và support nhiều loại CSDL khác nhau.
Sau đây là 1 số cách truy vấn hữu dụng trong 1 số tình huống phức tạp

1. JOINS

Basic Join Statement
DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.id', 'contacts.phone', 'orders.price')
            ->get();
Left Join Statement
DB::table('users')
        ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
        ->get();
Advanced join clauses
DB::table('users')
        ->join('contacts', function($join)
        {
            $join->on('users.id', '=', 'contacts.user_id')->orOn(...);
        })
        ->get();
Trường hợp muốn sử dụng thêm điều kiện "Where" trong lệnh JOINS


DB::table('users')
        ->join('contacts', function($join)
        {
            $join->on('users.id', '=', 'contacts.user_id')
                 ->where('contacts.user_id', '>', 5);
        })
        ->get();

2. ADVANCED WHERE

Parameter Grouping


DB::table('users')
            ->where('name', '=', 'John')
            ->orWhere(function($query)
            {
                $query->where('votes', '>', 100)
                      ->where('title', '<>', 'Admin');
            })
            ->get();
Câu lệnh truy vấn sẽ như sau:
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')


Exists Statements
DB::table('users')
            ->whereExists(function($query)
            {
                $query->select(DB::raw(1))
                      ->from('orders')
                      ->whereRaw('orders.user_id = users.id');
            })
            ->get();
Câu lệnh truy vấn sẽ như sau:
select * from users
where exists (
    select 1 from orders where orders.user_id = users.id
)

3. KẾT HỢP TRUY VẤN THUẦN (RAW)
Đôi khi bạn buộc phải lồng các truy vấn thuần vào câu lệnh như dưới đây, hãy lưu ý để tránh bị lỗi SQL Injection
$users = DB::table('users')
                     ->select(DB::raw('count(*) as user_count, status'))
                     ->where('status', '<>', 1)
                     ->groupBy('status')
                     ->get();
Source: http://laravel.com/docs/4.2/queries

Database configuration - Read / Write Connections

Cấu hình kết nối tới 2 database Mysql: 1 để đọc và 1 để ghi.
Có thể override các giá trị ở mảng chính (nếu cần)
'mysql' => array(
    'read' => array(
        'host' => '192.168.1.1',
    ),
    'write' => array(
        'host' => '196.168.1.2', 
    ),
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

Wednesday, January 28, 2015

LARAVEL FRAMEWORK

Laravel Framework 4, vừa chỉ ra mắt vào cuối tháng 5 - 2013. Tuy vậy, PHP Framework này đã nhanh chóng có được một cộng đồng rất lớn trong thế giới các Framework của ngôn ngữ lập trình PHP

Sự tinh tế của Laravel nằm ở chỗ bắt kịp được xu hướng công nghệ mà điểm nhấn ở đây là các tính năng mới trong các phiên bản PHP 5.3 trở lên. Điều đó được thể hiện qua khái niệm namespacecomposer, closure và rất nhiều những tiêu chuẩn trong design pattern được áp dụng trên nền tảng framework này. Đồng thời, với cách hướng dẫn đơn giản và dễ tiếp cận giống với Codeigniter Framework đã khiến người dùng thích ngay từ lần đầu "hẹn hò" với framework này.

Laravel 4 cũng có sự tích hợp của một phần trong thư viện symfony và áp dụng triệt để mô hình ORM với khái niệm liên quan đến Eloquent class. Đồng thời, nó cũng giải quyết được những vấn đề mà các framework khác đang mắc phải. Chẳng hạn như master layout, mô hình xử lý với ORM, event model,....

Cuối năm 2013, khi các chuyên gia tổng hợp về sự tăng trưởng của laravel framework trong những tháng cuối năm thì chúng ta có thể thấy Laravel vượt lên dẫn đầu trước các PHP framework lớn mạnh khác một cách ngoạn mục, khi tỷ lệ % của laravel chiếm tới những 25,85%, trong khi các framework đình đám khác lại tụt giảm thê thảm như zend framework 2 chỉ còn 4,51% là 1 ví dụ.
Thống kê PHP Framework trong cuối năm 2013
Có thể bảng thống kê trên đây chưa thể mang một ý nghĩa khách quan cho thấy laravel tăng trưởng hoàn toàn, nhưng thêm 1 cơ sở để các bạn tin rằng laravel đã đảo chiều ngoạn mục đó là dựa vào thống kê trên mạng xã hội dành cho lập trình viên toàn thế giới github. Bạn có thể nhận thấy qua hình chụp bên dưới.
Thống kê PHP Framework trong github
Với con số 8341 sao và dẫn đầu trong các danh sách PHP Framework, điều nay cho thấy "có 1 sự quan tâm không hề nhẹ" của giới coder đối với Laravel Framework.

Chưa hết, quyển sách Codebright viết về Laravel Framework 4.x của tác giả Dayle Rees cũng nhanh chóng làm mưa làm gió trên thị trường, chỉ vỏn vẹn vài tháng sách đã bán được tận 3295 bản (ebook). Một con số hằng mơ của nhiều tác giả viết về công nghệ nhất là với thị trường ebook mua 1 mà share 10 như hiện nay. Hiện quyển sách này liên tục đứng vào vị trí bestselling trong nhiều tuần qua tại hãng phát hành ebook Leanpub.
Top 10 quyển sách bán chạy nhất trong tuần
Trong khi quyển sách zend framework 2: Web Development with Zend Framework 2 của tác giả Michael Romer dù đã phát hành từ cuối năm 2012 nhưng đến nay cũng mới chỉ bán được 962 bản đọc.

Nguồn: QHonline