Laravel for beginer

Laravel là gì và tại sao lại chọn Laravel

Laravel là 1 open source, là một framework dùng để xây dựng web application, được thiết kế dựa trên mô hình MVC (Model, Controller, View), Theo kết qủa khảo sát của các Developer vào tháng 12 năm 2013, thì Laravel Framework đứng top 1 một trong những framework phổ biến nhất, Tháng 8 năm 2014, Laravel Framework được xem như là một dự án PHP phổ biến nhất trên Github. Laravel hiện đang là framework tốt nhất, đứng TOP 1 trong 3 năm liền trên bảng xếp hạng các Framework tốt nhất. Hiện nay các ứng viên có khả năng cao về Laravel được săn đón rất nhiều.

Sơ lược các tính năng của Laravel Framework

  • Bundles: Cung cấp một hệ thống đóng gói các module, với rất nhiều tính năng đi kèm.
  • Composer: Được sử dụng như một công cụ quản lý với tính năng như thêm các gói cài đặt, các chức năng PHP phụ trợ cho Laravel có trong kho Packagist.
  • Eloquent ORM: Ánh xạ các đối tượng và quan hệ cơ sở dữ liệu, cung cấp các phương thức nội bộ để thực thi đồng thời cũng bổ sung các tính năng hạn chế về mối quan hệ giữa các đối tượng cơ sở dữ liệu. Eloquent ORM trình bày các bảng trong cơ sở dữ liệu dưới dạng các lớp, cung cấp thêm lựa chọn truy cập cơ sở dữ liệu trực tiếp mới mẻ hơn, chuyên nghiệp hơn.
  • Application logic: Là một phần của phát triển ứng dụng, được sử dụng bởi bộ điều khiển controllers.
  • Routes: Định nghĩa mối quan hệ giữa các đường dẫn (url), các liên kết (link) . Khi một liên kết được tạo ra bằng cách sử dụng tên của routes, thì một định danh liên kết thống nhất sẽ được tạo ra bởi laravel.
  • Restful Controller: Cung cấp các tùy chọn để tách các logic phía sau các request HTTP POST, GET.
  • Class auto loading: Cung cấp việc tải tự động các class trong PHP, mà không cần include các class vào. Tùy thuộc vào yêu cầu các class cần thiết sẽ được nạp vào, hạn chế các class không cần thiết.
  • View: Chứa các mã html, hiển thị dữ liệu được chỉ định bởi controller.
  • Migrations: Cung cấp một hệ thống kiểm soát các phiên bản lược đồ cơ sở dữ liệu (database cheme), làm cho web ứng dụng có khả năng tương tác phù hợp những thay đổi logic, các đoạn mã code của ứng dụng và những thay đổi cần thiết trong việc bố trí cơ sở dữ liệu, triển khai nới lỏng và cập nhật các ứng dụng.
  • Unit Testing: đóng một vai trò quan trọng trong Laravel, Unit testting chứa rất nhiều các hệ thống unit testing, giúp phát hiện và ngăn chặn lỗi trong khuôn khổ nhất định. Unit Testing có thể được chạy thông qua tiện ích command-line.
  • Automatic pagination: Tính năng tự động phân trang được tích hợp vào Laravel giúp đơn giản hóa các nhiệm vụ thực hiện phân trang so với các phương pháp thông thường.

Các Component trong Laravel

  1. Routes Nói nôm na ở đây chúng ta có thể hiểu đơn giản thì routes chính là 1 cách để bạn viết lại đường dẫn của ứng dụng và laravel có thể hiểu được cách viết này và sử dụng nó để gọi các đối tượng, phương thức cần thiết. Routes trong laravel được quy định trong file app -> Http -> routes.php và các routes được define như sau : Route::get('/', '[email protected]').
  2. Controllers Khi người dùng truy cập vào đường dẫn chính là url mà ta đã định nghĩa trong routes Route::get('/', '[email protected]') thì Laravel sẽ gọi tới Controller có tên là WelcomeController (nằm trong app -> Http -> Controllers -> WelcomeController.php), với phương thức là index (ngăn cách giữa controller và phương thức của nó là dấu @).
  3. Như trong Controller đã mô tả chúng ta có phương thức index, phương thức index trong controller WelcomeController này sẽ tiếp tục gọi View là welcome
    public function index()
    {
       return view('welcome');
    }
    
    File view welcome này nằm trong thư mục resources -> views -> welcome.blade.php, chịu trách nhiệm hiển thị ra nội dung theo chủ ý của controller. => Quy trình là Routes gọi phương thức của Controllers, hiển thị ra Views.

Cách để đưa dữ liệu ra view

  1. Tạo PagesController.php Đầu tiên tạo 1 controller mới đặt tên là PagesController.php trong thư mục Controllers của Laravel. Tiếp theo, thêm function aboutme() vào class PagesController vừa tạo để gọi view aboutme được đặt trong folder pages
    <?php namespace App\Http\Controllers;
    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    class PagesController extends Controller {
        public function aboutme(){
            return view("pages.aboutme");
        }
    }
    
  2. Tạo routes Trong file routes.php, tạo 1 đoạn routes mới như sau để sử dụng PagesController ở trên
    Route::get('/aboutme', '[email protected]');
    
  3. Tạo views aboutme.blade.php Trong folder pages ở thư mục views, tạo 1 file view mới đặt tên là aboutme.blade.php
  4. Gửi dữ liệu ra view
  • Cách 1 : Đưa dữ liệu đơn ra ngoài view với phương thức with
    
    Sửa lại function aboutme() trong controller 1 chút như sau :
    public function aboutme(){
    	$data= 'My name';
    	return view("pages.aboutme")->with('name',$data);
    }
    

Ở đoạn code trên, với phương thức with bạn đã gửi dữ liệu với key là name và value là $data ra ngoài view. Tiếp đến chúng ta sẽ sửa lại file aboutme.blade.php như sau để bắt lấy dữ liệu gửi ra từ controller như sau :

    <html>
    <head>
        <meta charset="UTF-8">
        <title>About me</title>
    </head>
    <body>
        <h1>About me {{ $name }} </h1>
    </body>
    </html>
    ```
    
    Laravel đã tự động parse key là name thành biến $name khi ra ngoài view, và với cách viết {{ $name }}.
    
*     Cách 2 : Đưa nhiều dữ liệu ra ngoài view với phương thức with
    Sửa lại function aboutme() trong PagesController.php 1 tí như sau :
    ```
    public function aboutme(){
        $name = 'My name ';
        $age = '30';
        return view("pages.aboutme")->with([
            'name' => $name,
            'age' => $age
        ]);
    }
    ```
    Sửa lại file aboutme.blade.php như sau :
    ```
    <html>
    <head>
        <meta charset="UTF-8">
        <title>About me</title>
    </head>
    <body>
        <h1>About me {{ $name }} {{ $age }}</h1>
    </body>
    </html>
    ```
*     Cách 3 : Gửi dữ liệu ra ngoài view không dùng từ khóa with
    Sửa function aboutme() thành như sau :
    ```
    public function aboutme(){
        $name = 'My name ';
        $age = '30';
        $data = [];
        $data['name'] = $name;
        $data['age'] = $age;
        return view("pages.aboutme",$data);
    }
    ```
    => Việc truyền dữ liệu ra view khá đơn giản với việc truyền trưc tiếp hoặc bỏ chung vào data như một mảng
# Template trong laravel 5
* Vậy thì Template trong Laravel 5 là gì ?
Một trang web thông thường, các thành phần như header, footer, sidebar-left, sidebar-right,… thường bao gồm những nội dung cố định, không thay đổi. Chỉ có phần nội dung chính giữa là sẽ thay đổi theo từng trang. Vậy nên khi nhảy từ trang này qua trang khác, thay vì phải mất công tạo lại những thành phần cố định trên trong khi chỉ có nội dung chính giua là thay đổi. Vậy template được tạo ra để giải quyết vấn đề này bằng việc nhóm toàn bộ các phần cố định lại. Đó chính là 1 mẫu bố cục chung cho tất cả các trang có sử dụng lại những thành phần giống nhau mà không phải viết lại toàn bộ, từ đó trên mỗi trang, chỉ cần thay đổi ở một số nơi được chỉ định trên trang từ template.
* Cách sử dụng template trong Laravel 5
Trong file routes.php, mình sẽ thêm 2 route mới gọi 2 trang contact và about như sau:

Route::get('/contact', '[email protected]'); Route::get('/about', '[email protected]');

Tiếp đến, trong file PagesController.php, các bạn thêm 2 function mới là about() và contact() như dưới đây để gọi 2 view là about.blade.php và contact.blade.php
<?php namespace App\Http\Controllers; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PagesController extends Controller { public function about(){ return view('pages.about'); } public function contact(){ return view('pages.contact'); } } ``` Tiếp theo, tạo 2 file view là about.blade.php và contact.blade.php đặt trong folder pages. Đồng thời tạo thư mục mới là templates, trong thư mục templates, tạo file master.blade.php dùng để làm template. Trong file master.blade.php sẽ thiết kế một template có nội dung đơn giản như sau : ``` <html> <head> <title>Đây là trang sử dụng Template</title> </head> <body> @yield('content') </body> </html> ``` @yield(‘content’), đây là 1 phương thức của Laravel, nhằm nói cho các trang khác khi sử dụng template master.blade.php biết được rằng đây là phần sẽ đặt nội dung cần thay đổi. Trong file about.blade.php và contact.blade.php sẽ có nội dung lần lượt như sau : ``` trang about.blade.php @extends('templates.master') @section('content') Đây là trang about @stop trang contact.blade.php @extends('templates.master') @section('content') Đây là trang contact @stop ``` Ở 2 trang trên, phương thức @extends(‘ten-template’), sẽ chỉ định template mà bạn cần sử dụng cho trang hiện hành của mình mà ở đây đó là templates.master . Với phương thức @section(‘content’) , bạn sẽ đặt nội dung chỉ có trên trang hiện hành, ví dụ trên trang about sẽ là “Đây là trang about“, contact sẽ là “Đây là trang contact“. Cuối cùng kết thúc @section các bạn phải dùng phương thức @stop để đóng nội dung cần thay đổi lại. => Như vậy chúng ta đã có 1 template cho 2 trang about và contact với cùng title và chỉ khác nội dung ở mỗi trang tự thêm vào.