17/09/2018, 14:34

Giới thiệu tổng quan về laravel

Khi sử dụng bất kỳ công cụ nào trong thế giới thực, bạn cảm thấy tự tin hơn nếu bạn hiểu cách thức hoạt động của công cụ đó. Phát triển ứng dụng không ngoại lệ. Khi bạn hiểu các công cụ phát triển của bạn hoạt động như thế nào, bạn cảm thấy thoải mái và tự tin hơn khi sử dụng chúng. Loạt bài viết ...


Bạn đang muốn sử dụng laravel và bạn không biết băt đầu từ đâu?

Khi sử dụng bất kỳ công cụ nào trong thế giới thực, bạn cảm thấy tự tin hơn nếu bạn hiểu cách thức hoạt động của công cụ đó. Phát triển ứng dụng không ngoại lệ. Khi bạn hiểu các công cụ phát triển của bạn hoạt động như thế nào, bạn cảm thấy thoải mái và tự tin hơn khi sử dụng chúng. 
Loạt bài viết sau đây sẽ giúp các bạn bắt đầu sử dụng laravel framework một cách tự tin hơn.

Giới thiệu qua về laravel:
Laravel là một framework web PHP miễn phí, mã nguồn mở, được tạo ra bởi Taylor Otwell và dành cho việc phát triển các ứng dụng web theo mô hình kiến trúc model-view – controller (MVC) và dựa trên Symfony. Một số tính năng của Laravel là một hệ thống đóng gói mô-đun với một công cụ quản lý phụ thuộc cực kì mạnh mẽ (Service Container), các cách khác nhau để truy cập cơ sở dữ liệu quan hệ, các tiện ích hỗ trợ triển khai và bảo trì ứng dụng.
Với cú pháp cực kì thân thiện thì laravel nhanh chóng nhận được sự tán thành của cộng đồng PHP deverloper, Khi bạn sử dụng laravel có nghĩa là bạn chỉ cần tập trung vào Business Logic mọi việc còn lại hãy để laravel lo cho bạn.

Lan man tý thôi, sau một thời gian tìm hiểu và trải nghiệm framework này mình có một số kiến thức muốn chia sẻ mà mình nghĩ là hữu ích với những người muốn làm việc với framework cực kì hiện đại này.

 

Phần 1: Các khái niệm cơ bản trong laravel 
Phần một tôi muốn chia sẻ một số khái niệm cơ bản nhưng cũng cực kì quan trọng khi làm việc với laravel,

- Container

- Lifecycle Overview

- Điều đầu tiên

Điểm vào cho tất cả các Request đến một ứng dụng Laravel là file public / index.php. Tất cả các yêu cầu được chuyển đến tệp này bởi cấu hình máy chủ web (Apache / Nginx) của bạn. Tệp index.php không chứa nhiều code. Thay vào đó, nó là một điểm khởi đầu để load phần còn lại của framework.

File index.php tải file autoload do Composer tạo ra, và sau đó lấy ra một thể hiện của ứng dụng Laravel từ kịch bản lệnh của file bootstrap / app.php

- HTTP / Console Kernels

Tiếp theo, request được gửi đến HTTP Kernel hoặc  Console Kernel tùy thuộc vào loại request đang nhập vào ứng dụng. Hai kernel này là vị trí trung tâm mà tất cả các yêu cầu đều đi qua. Vì phần việc của chúng ta chủ yếu làm việc với các http request nên chúng ta hãy tập trung vào HTTP Kernel, nằm trong thư mục  app / Http / Kernel.php.

Nó định nghĩa một mảng bootstrapper sẽ được chạy trước khi request được thực hiện. Những bootstrappers như cấu hình Error handling, Log, Envinronments  và thực hiện các tác vụ khác cần được thực hiện trước khi request thực sự được xử lý.

Nó cũng định nghĩa một danh sách các HTTP middleware mà tất cả các request phải đi qua trước khi được ứng dụng xử lý. Các middleware này xử lý việc đọc và ghi  HTTP session,  xác định xem ứng dụng có đang ở chế độ bảo trì hay không, xác minh mã thông báo CSRF và nhiều tác vụ khác.

Phương thức xử lý của HTTP kernel khá đơn giản là nhận được một request và trả về một response. Bạn hiểu đơn giản Http kernel như là một chiếc hộp lớn đại diện cho toàn bộ ứng dụng của bạn. Cung cấp cho nó các  HTTP request  và nó sẽ trả về các  HTTP response. 

 

- Service Providers
Một trong những hành động khởi động Kernel quan trọng nhất là load các service provider cho ứng dụng của bạn. Tất cả các service provider cho ứng dụng được cấu hình trong mảng providers trong file cấu hình của config / app.php. Đầu tiên, phương thức register sẽ được gọi trên tất cả các provider, sau đó, khi tất cả các provider đã được đăng ký, phương thức boot sẽ được gọi.

Các service provider thực sự là chìa khóa để khởi động một ứng dụng Laravel.
Khởi tạo 1 Laravel instance >> các Service provider được đăng kí >>  Các Request được đưa tới ứng dụng đã được nạp sẵn tất cả các dịch vụ để xử lý.
Đơn giản vậy thôi.

 

 

- Service Container

Serivce Container là một công cụ mạnh mẽ để quản lý các phụ Dependency class và thực hiện Dependency injection. Dependency injection về cơ bản có nghĩa là: các class phụ thuộc được "tiêm" vào 1 class khách thông qua hàm khởi tạo hoặc trong một số trường hợp là các phương thức "setter".

<?php

namespace App\Http\Controllers;

use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new controller instance.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        $user = $this->users->find($id);

        return view('user.profile', ['user' => $user]);
    }
}

Simple Bindings

Trong service provider, bạn luôn có quyền truy cập vào container thông qua $this->appproperty. Chúng ta có thể đăng kí bằng cách bind method, bằng cách sử dụng phương thức bind, truyền class name hoặc interface name mà chúng ta muốn đăng ký cùng với một Closure để trả về một 1 thể hiện của lớp:



<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class UserRepositoryServiceProvider extends ServiceProvider
{
    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('App\Repositories\UserRepository', function ($app) {
             return new \App\Infrastructure\Repositories\EloquentUserRepository();
        });
    }
}

Mỏi tay rồi bài chia sẻ của tôi tạm thời dừng lại ở đây.
Trong phần tiếp theo tôi sẽ tiếp tục giới thiệu các tính năng mạnh mẽ mà Service Container mang lại cho các bạn.


 

+4