Laravel Valet

Giới thiệu

Valet là một môi trường phát triển Laravel dành cho những developer thích tối giản giản hóa khi sử dụng Mac. Không có Vagrant, Apache, Nginx, /etc/hosts. Bạn chỉ có thể chia sẻ sites sử dụng local tunnels. Yeah, Chúng tôi cũng thích.

Laravel Valet cấu hình máy Mac để luôn chạy Caddy ở background khi máy khởi động. Sau đó sử dụng DnsMasq, Valet proxy các request tới tên miền *.dev để trở tới sites cài đặt trên máy local của bạn.

Nói cách khác, môi trường phát triển Laravel development rất nhanh mà chỉ tốn có 7MB RAM. Valet không phải là phương án thay thế hoàn toàn cho Vagrant hay Homestead, nhưng cung cấp một giải pháp hay nhất nếu bạn muốn một môi trường cơ bản, thoải mái, yêu cầu tốc độ nhanh hoặc khi sử dụng bị giới hạn về RAM.

Ngoài ra, Valet còn hỗ trợ danh sách bên dưới và còn nhiều hơn nữa:

Tuy nhiên, bạn có thể sẽ muốn mở rộng Valet để sử dụng custom drivers.

Valet hay Homestead

Như bạn biết, Laravel cung cấp Homestead, một môi trường phát triên local khác. Homestead và Valet khác nhau ở đối tượng sử dụng và cách tiếp cận để phát triển. Homestead cung cấp máy ảo Ubuntu hoàn toàn cấu hình Nginx tự động. Homestead là một lựa chọn tuyệt vời nếu bạn muốn một môi trường hoàn toàn ảo hóa hoặc nếu bạn đang sử dụng Windows / Linux.

Valet chi hỗ trợ Mac, và yêu cầu bạn phải cài PHP và một database server trực tiếp trên môi trường local của bạn. Bạn có thể cài những thứ đó rất đơn giản bằng cách sử dụng Homebrew với vài dòng lệnh đơn giản brew install php70brew install mariadb. Valet cung cấp môi trường local nhanh và sử dụng ít tài nguyên, vì vậy, đây là một lựa chọn tuyệt vời cho những ai chỉ cần PHP / MySQL mà không muốn một môi trường hoàn toàn ảo hóa.

Cả Valet và Homestead đều rất tuyệt cho việc cấu hình môi trường phát triển. Việc bạn chọn cái nào đều tùy thuộc vào sở thích của bạn và của team của bạn.

Cài đặt

Valet yêu bạn phải dùng MAC và Homebrew. Trước khi cài đặt, bạn nên chắc chắn rằng MAC của bạn không có ứng dụng nào như Apache hoặc Nginx sử dụng cổng 80.

  • Cài đặt hoặc cập nhật Homebrew phiên bản mới nhất bằng lệnh brew update.
  • Cài đặt PHP 7.0 sử dụng Homebrew bằng lệnh brew install homebrew/php/php70.
  • Cài đặt Valet sử dụng Composer bằng lệnh composer global require laravel/valet. Đảm bảo thư mục ~/.composer/vendor/bin ở trong "PATH" của hệ điều hành.
  • Chạy lệnh valet install. Nó sẽ cấu hình và cài đặt Valet và DnsMasq, và đăng ký Valet daemon để tự động chạy khi hệ thống khởi động lại.

Sai khi Valet được cài đặt, thử ping đến bất kỳ tên miền *.dev ví dụ như ping foobar.dev. Nếu Valet được cài đặt đúng bạn sẽ nhìn thấy tên miền trả về địa chỉ 127.0.0.1.

Valet sẽ tự khởi động deamon của nó mỗi khi hệ điều hành khởi động lại. Vì thế không cần thiết phải chạy valet start hoặc valet install thêm lần nào nữa sau khi Valet đã được cài đặt.

Sử dụng tên miền khác

Mặc định, Valet cung cấp project sử dụng tên miền .dev TLD. Nếu bạn muốn sử dụng tên miền khác, bạn có thể sử dụng lệnh valet domain tld-name.

Ví dụ, nếu bạn muốn sử dụng tên miền dạng .app thay vì .dev, chạy lệnh valet domain app và Valet sẽ bắt đầu chạy project của bạn tại *.app tự động.

Cơ sở dữ liệu

Nếu bạn cần cơ sở dữ liệu, hãy cài MariaDB bằng lệnh brew install mariadb trên terminal. khi MariaDB đã được cài, bạn có thể bắt đầu sử dụng nó bằng lệnh brew services start mariadb. Bạn có thể kết nối với cơ sở dữ liệu tại 127.0.0.1 sử dụng username là root và password là một chuỗi string rỗng.

Cập nhật

Nếu bạn muốn cập nhật Valet trên con MAC của bạn, có thể sử dụng lệnh composer global update trên terminal. Sau khi cập nhật, bạn nên chạy lệnh valet install nó sẽ cập nhật lại những thông tin cấu hình cần thiết của bạn.

Serving Sites

Khi Valet đã được cài đặt, bạn có thể sẵn sàng bắt đầu serving sites. Valet cung cấp 2 lệnh giúp bạn serve your Laravel sites của bạn: park and link.

Câu lệnh park

  • Tạo một thư mục mới trên MAC của bạn, ví dụ như mkdir ~/Sites. Tiếp theo, cd ~/Sites và chạy lệnh valet park. Lệnh này sẽ đăng ký thư mục làm việc hiện tại của bạn như là đường dẫn mà Valet có thể tìm kiếm cho sites.
  • Tiếp theo, tạo mội site Laravel mới: laravel new blog.
  • Mở http://blog.dev bằng trình duyệt.

Tất cả chỉ có vậy. Bây giờ, bất cứ dự án Laravel nào mà bạn tạo trong thư mục "parked" sẽ được tự động được serve theo quy tắc http://folder-name.dev.

The link Command

Câu lệnh link cũng có thể được sử dụng để serve sites Laravel của bạn. Câu lệnh này cũng có ích khi mà bạn chỉ muốn serve một site trong thư mục, chứ không phải toàn thư mục.

  • Để sử dụng lệnh này,di chuyển tới một trong những dự án của bạn và chạy lệnh valet link app-name. Valet sẽ tạo một symbolic link trong ~/.valet/Sites để trỏ tới thư mục đang làm việc.
  • Sau khi chạy lệnh link, bạn có thể truy cập trên trình duyệt tại địa chỉ http://app-name.dev.

Để xem danh sách tất cả các thư mục được link, bạn dùng lệnh valet links.Bạn có thể sử dụng valet unlink app-name để hủy các symbolic link.

Bạn có thể sử dụng valet link để serve cho dự án nhiều tên miền con. Để thêm một tên miền con vào dự án của bạn dùng lệnh valet link subdomain.app-name từ folder dự án.

Bảo mật Sites với TLS

Mặc định, Valet serve các site thông qua HTTP thuần. Tuy nhiên, nếu bạn muốn serve mỗi site với mã hóa TLS sử dụng HTTP/2, thì dùng lệnh secure command. Ví dụ, nếu site của bạn được serve tại địa chỉ laravel.dev, bạn nên chạy lệnh sau để bảo mật nó:

valet secure laravel

Để gỡ "bảo mật" mội site và quay trở lại sử dụng HTTP, thì bạn dùng lệnh unsecure. Giống như lệnh secure, câu lệnh này nhạn tên host mà bạn muốn gỡ chế độ bảo mật:

valet unsecure laravel

Chia sẻ Sites

Valet thậm chí có câu lệnh để bạn chia sẻ site trên máy của bạn ra ngoài. Không cần thiết phải cài đặt thêm cái gì khi mà Valet đã được cài trên máy.

Để chia sẻ một site, chuyển vào thư mục site và dùng lệnh valet share. Một link công cộng URL sẽ được chèo vào clipboard và bạn có thể dán trực tiếp vào trình duyệt. Chỉ có vậy.

Để dừng chia sẻ, ấn Control + C để hủy tiến trình.

Xem Logs

Nếu bạn muốn xem tất cả logs site của bạn trong quá trình đang chạy thì dùng lệnh valet logs. Khi có log mới thì nó sẽ được hiển thi ra ở terminal. Thật tuyệt vời đúng không! bạn không cần phải thoải terminal để xem log mà bạn sẽ được xem trực tiếp trên đấy luôn.

Tùy biến Valet Drivers

YBạn có thể viết riêng "driver" cho Valet để các ứng dụng serve PHP chạy trên các framework hay CMS mà không được hỗ trợ sẵn bởi Valet. Khi bạn cài Valet, thư mục ~/.valet/Drivers sẽ được tạo và chứa một file SampleValetDriver.php. File này chứa các ví dụ minh họa cách viết một driver như thế nào. Để viết một driver chỉ yêu cần bạn triển khai ba hàm chính: serves, isStaticFile, và frontControllerPath.

Tất cả hàm này đều nhật các giá trị $sitePath, $siteName, và $uri vào trong tham số. Tham số $sitePath là đường dẫn đầy đủ tới site đang được serve trên máy local của bạn, ví dụ /Users/Lisa/Sites/my-project. Tham số $siteName là "host" / "site name" trên phần tên miền (my-project). Tham số $uri là request URI tới site (/foo/bar).

Khi bạn đã hoàn thiện driver cho Valet, đặt vào trong thư mục ~/.valet/Drivers và sử dụng quy tắt đặt tên FrameworkValetDriver.php. Ví dụ, Nếu bạn viết driver cho WordPress thì tên file phải là WordPressValetDriver.php.

Hãy cùng nhau xem một ví dụ để bạn biết cách viết một driver cho Valet như thế nào.

Hàm serves

Hàm serves nên trả về true nếu driver của bạn cần xử lý request đến. Ngược lại se trả về false. Vì vậy, bên trong hàm này bạn nên kiểm tra xem nếu giá trị $sitePath có chứa kiểu dự án mà bạn muốn serve hay không.

Ví dụ, giả sử chúng ta đang viết một WordPressValetDriver. Serve của chúng ta phải có dạng như bên dưới:

/**
 * Determine if the driver serves the request.
 *
 * @param    string  $sitePath
 * @param    string  $siteName
 * @param    string  $uri
 * @return  void
 */
public function serves($sitePath, $siteName, $uri)
{
    return is_dir($sitePath.'/wp-admin');
}

Hàm isStaticFile

Hàm isStaticFile nên kiểm tra xem request đến một file có phải là "static", ví dụ như file ảnh hoặc stylesheet. Nếu file là static, hàm sẽ trả về đường dẫn đầy đủ tới file static đó trên máy. Nếu request đến không phải là file static, hàm sẽ trả về false:

/**
 * Determine if the incoming request is for a static file.
 *
 * @param    string  $sitePath
 * @param    string  $siteName
 * @param    string  $uri
 * @return  string|false
 */
public function isStaticFile($sitePath, $siteName, $uri)
{
    if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
        return $staticFilePath;
    }

    return false;
}

Hàm isStaticFile chỉ được gọi nếu hàm serves trả về true cho request đến và request URL không phải là /.

Hàm frontControllerPath

Hàm frontControllerPath trả về đường dẫn đầy đủ tới "front controller" của ứng dụng, ở đây sẽ là file "index.php" hoặc tương ứng:

/**
 * Get the fully resolved path to the application's front controller.
 *
 * @param    string  $sitePath
 * @param    string  $siteName
 * @param    string  $uri
 * @return  string
 */
public function frontControllerPath($sitePath, $siteName, $uri)
{
    return $sitePath.'/public/index.php';
}

Các câu lệnh Valet khác

Câu lệnh Miêu tả
valet forget Thực thi câu lệnh này trong mội thư mục "parked" để xóa khỏi danh dách được park.
valet paths Xem tất cả đường dẫn được "parked".
valet restart Khởi động lại Valet daemon.
valet start Bắt đầu Valet daemon.
valet stop Đưng Valet daemon.
valet uninstall Gỡ bỏ Valet daemon.
Nguồn: https://laravel.com/docs/5.3/valet