Cài đặt Laravel

Yêu cầu về môi trường code (hoặc server)

– Trước khi cài đặt Laravel, bạn cần đảm bảo môi trường code (trên localhost) hoặc trên hosting/vps/server của bạn đã thỏa mãn các yêu cầu sau:

+ Phiên bản PHP từ 5.5.9 trở lên
+ Extension OpenSSL, PDO, Mbstring,Tokenizer của PHP đã được cài đặt và đang hoạt động

Cài đặt Laravel

– Laravel sử dụng Composer để quản lý các gói package phụ thuộc, do đó trước khi cài Laravel bạn hãy tiến hành cài Composer trước. Bạn có thể tìm hiểu cách tài về và cài đặt Composer tại trang chủ của nó

a) Cài đặt thông qua Laravel Installer

– Đầu tiên bạn download Laravel Installer thông qua Composer

– Hãy chắc rằng đường dẫn đến thư mục ~/.composer/vendor/bin (tương ứng trên mỗi hệ điều hành có thể khác nhau) đã nằm trong đường dẫn PATH để câu lệnh laravel có thể được thực thi. Sau khi cài đặt xong, bạn có thể tạo ứng dụng web mới bằng Laravel thông qua câu lệnh sau (blog là tên ứng dụng web của bạn)

b) Cài đặt thông qua Composer Create-project

– Ngoài cách trên bạn có thể sử dụng dòng lệnh create-project của composer

Cấu hình Laravel

– Tất cả những file cấu hình của Laravel được lưu trong thư mục config trong ứng dụng web của bạn

a) Quyền truy cập vào các directory (đường dẫn)

– Sau khi cài đặt Laravel, bạn cần đảm bảo rằng các đường dẫn storagebootstrap/cache đã được cấp quyền cho phép ghi (write) trên môi trường code hoặc trên hosting/vps/server của bạn, nếu không thì Laravel sẽ không chạy được.

b) Mã key của ứng dụng (application key)

– Điều cần làm tiếp theo quan trọng không kém đó là bạn phải thiết lập 1 chuỗi key ngẫu nhiên cho ứng dụng web của bạn. Nếu bạn đã cài đặt Laravel thông qua Composer hoặc Laravel Installer, mã key này sẽ được set thông qua dòng lệnh

– Thông thường chuỗi key này sẽ dài 32 ký tự. Key này được lưu tại file .env (viết tắt của environment file). Nếu bạn chưa đổi tên file .env.example thành .env thì bạn nên làm ngay. Nếu mã key của ứng dụng không được thiết lập, thì sessions và những dữ liệu được mã hóa sẽ không được bảo mật tốt.

c) Những cấu hình khác

– Bạn có thể cấu hình các thông số khác tại file config/app.php. Một số tùy chọn như timezone (múi giờ), locale bạn có thể điều chỉnh lại cho phù hợp. Ngoài ra bạn có thể cấu hình một số thành phần của Laravel như:

+ Cache
+ Database
+ Session

Middleware trong Laravel

Giới thiệu

Middleware cung cấp một giải pháp khá tiện ích cho việc filtering HTTP các requests vào ứng dụng. Ví dụ, Laravel có chứa một middleware xác thực người dùng đăng nhập vào hệ thống. Nếu user chưa đăng nhập, middleware sẽ chuyển hướng user tới màn hình đăng nhập. Tuy nhiên, nếu user đã đăng nhập rồi, thì middleware sẽ cho phép request được thực hiện tiếp tiến trình xử lý vào ứng dụng.

Tất nhiên, bạn có thể viết thêm middleware để thực hiện nhiều tác vụ nữa ngoài kiểm tra đăng nhập vào hệ thống. Một CORS middleware có trách nhiệm cho việc thêm các header hợp lý vào trong tất cả các response gửi ra ngoài. Một logging middleware có thể ghi log cho tất cả các request tới ứng dụng.

Có vài middleware đã có sẵn trong Laravel framework, bao gồm middlware xác thực, CSRF protection. Tất cả được nằm trong thư mục app/Http/Middleware.

Tạo Middleware

Để tạo mới một middleware, sử dụng lệnh make:middleware:

Câu lệnh này sẽ tạo ra class CheckAge bên trong thư mục app/Http/Middleware. Trong middleware này, chúng ta chỉ cho phép truy cập vào route nếu giá trị age lớn hơn 200. Ngược lại, chúng ta sẽ chuyển hướng request lại trang home URI.

Như bạn thấy, nếu biến age nhỏ hơn hoặc bằng 200, middleware sẽ trả về một HTTP tới client; ngược lại, request sẽ được gửi tiếp để xử lý. Để truyền request vào sâu hơn trong ứng dụng (cho phép middleware “vượt qua”), đơn giản chỉ cần gọi callback $next với $request.

Tốt nhất hãy hình dung như là một chuỗi các “lớp” trên HTTP requests cần phải đi qua trước khi nó vào ứng dụng. Mỗi lớp sẽ được kiểm tra request và thậm chí có thể hủy từ chối request hoàn toàn.

Trước & Sau Middleware

Việc middleware chạy trước hay chạy sau một request phụ thuộc vào chính nó. Ví dụ, middleware dưới đây sẽ làm một vào tác vụ trước khi request được chương trình xử lý:

Tất nhiên, middleware này sẽ thực hiện việc của nó sau khi request được xử lý bởi ứng dụng:

Đăng ký Middleware

Global Middleware

Nếu bạn muốn một middleware có thể thực thi trong mọi HTTP request tới ứng dụng của bạn, đơn giản chỉ cần thêm tên class của middleware trong thuộc tính $middleware của class app/Http/Kernel.php.

Gán Middleware vào Routes

Nếu bạn muốn gán middleware cho route cụ thể, đầu tiên bạn cần thêm middleware đấy vào trong file app/Http/Kernel.php. Mặc định, thuộc tính $routeMiddleware sẽ chứa một số class thuộc middleware của framework Laravel. Để thêm middleware của bạn, đơn giản chỉ là thêm nó vào dach sách và gán từ khóa bạn chọn. Ví dụ:

Khi middleware đã được định nghĩa trong HTTP kernel, bạn có thể sử dụng phương thức middleware gán cho một route:

Ngoài ra bạn cũng có thể gán nhiều middleware cho một route:

Khi đã gán middleware, bạn cũng có thể sử dụng tên đầy đủ của middleware:

Nhóm Middleware

Thỉnh thoảng bạn muốn nhóm một vài middleware lại trong một khóa để thực hiện gán vào route dễ dàng hơn. Bạn có thể sử dụng thuộc tính $middlewareGroups của HTTP kernel.

Mặc định, Laravel cung cấp sắp 2 nhóm middleware web và api chứa những middleware thường sử dụng mà bạn có thể muốn áp dụng cho web UI và API routes:

Nhóm middleware được gán vào routes và controller sử dụng cú pháp tương tự như với từng middleware. Một lần nữa, nhóm middleware làm đơn giản trong việc gán các middleware vào trong một route:

Tham số middleware

Middleware cũng có thể nhận thêm các tham số truyền vào. Ví dụ, nếu ứng dụng của bạn cần xác thực có “role” cụ thể trước khi thực hiện một thao tác nào đó, bạn có thể tạo một CheckRole middleware để nhận tên của role như một tham số.

Thêm các tham số middleware sẽ dược truyền vào middleware ngay sau tham số $next của hàm handle:

Tham số middleware có thể được khai báo trên route bằng cách phân chia tên middleware và tham số bởi dấu :. nhiều thao số thì phân chia bởi dấy phẩy:

Terminable Middleware

Thỉnh thoảng một middleware có thể cần thực hiện sau khi HTTP response đã được gửi xong cho trình duyệt. Ví dụ, “session” middleware đi kèm với Laravel cung cấp dữ liệu session cho storage sau khi response được gửi tới trình duyệt. Nếu bạn định nghĩa một terminate vào trong middleware, nó sẽ tự động được gọi sau khi response được gửi tới trình duyệt.

Hàm terminate sẽ nhận cả request và response. Khi bạn đã định nghĩa terminable middleware, bạ phải thêm nó vào trong danh sách global middleware trong HTTP kernel.

Khi gọi hàm terminate trong middleware, Laravel sẽ thực hiện giải quyết trường hợp mới cho middleware từ service container. Nếu bạn muốn sử dụng cùng một trường hợp khi mà hàm handle và hàm terminate được gọi, đăng ký middleware vào trong container sử dụng hàm singleton.

Nguồn: https://laravel.com/docs/5.2/middleware

Download / Upload file qua SFTP sử dụng Paramiko

Paramiko là 1 thư viện của Python giúp bạn có thể giao tiếp với server thông qua SSH 1 cách dễ dàng. Trong bài viết này tôi sẽ hướng dẫn bạn cách download và upload file lên server thông qua giao thức SFTP.

Bạn có thể tham khảo thêm toàn bộ API Docs của Paramiko tại http://docs.paramiko.org/en/2.0/

Tùy chỉnh SEO metadata với All in one SEO pack filters

Đối với chức năng SEO trên WordPress thì có lẽ plugin All in one SEO pack được rất nhiều người biết đến với khả năng SEO cho những website làm bằng WordPress rất tốt. Trong bài viết này tôi sẽ hướng dẫn các bạn tùy chỉnh các thẻ meta title, meta keyword, meta description cho website nếu các bạn đã cài đặt plugin All in one SEO pack phiên bản free.

Mặc định bản free của plugin này không hỗ trợ tùy chỉnh SEO cho các trang category và các trang taxonomy. Tuy nhiên chúng ta có thể sử dụng các filters được cung cấp bởi plugin này để tùy chỉnh, thêm đoạn code sau để chỉnh sửa lại meta title cho các trang category (thêm vào file functions.php)

Hàm custom_mt sẽ kiểm tra nếu đang ở trang category thì meta title sẽ là [tên category] + ” laptrinh.info articles & tutorials”, còn nếu là các trang khác thì sẽ trả về meta title mặc định được thiết lập bởi All in one SEO pack ($default_mt). Sau cùng ta sẽ add hàm đó vào filter aioseop_title.

Bạn có thể sử dụng thêm 2 filter aioseop_description và aioseop_keywords để tùy chỉnh meta description và meta keyword

Quản lý branch với TortoiseGit

Tạo 1 branch mới (nhánh mới)

– Việc đầu tiên khi tạo 1 branch mới, chúng ta sẽ tạo nó dưới local (máy của mình). Click phải vào thư mục chứa repository, trong menu chuột phải hiện ra bạn chọn “Create Branch …”

create-local-branch

– Bạn gõ tên branch mới vào mục Branch (trong ví dụ này là branch1) và click OK

name-branch

– Tiếp theo bạn sẽ chuyển từ branch hiện tại sang branch mới (nếu bạn đã chọn Switch to new branch ở bước trên thì không cần). Click phải vào thư mục chứa repository, chọn Switch/Checkout …

switch_checkout_branch

– Trong cửa sổ hiện ra, bạn chọn branch lúc nãy đã tạo và nhấn OK

switch-to-new-branch

– Bạn có thể commit những thay đổi vào branch mới tạo bằng cách click phải, chọn Git Commit -> [tên-branch-mới]

commit-to-new-branch

Push branch (nhánh) trên local lên trên Git server

– Khi chúng ta tạo branch mới và commit vào branch đó thì Git chỉ hiểu đó là local branch (branch được tạo trên máy của bạn), để cập nhật branch mới lên Git server cho người khác pull về máy của họ được, bạn cần push branch đã tạo ở local lên trên Git server.

push-local-branch-to-git-server

– Một cửa sổ hiện ra tương tự hình bên dưới và bạn nhấn OK

choose-local-branch-to-push

– Để chắc chắn branch mới có được tạo trên Git server hay không thì kết quả trả về nếu có dòng “* [new branch] branch1 -> branch1” nghĩa là bạn đã thực hiện thành công việc push 1 local branch lên trên Git server.

push-local-branch-success

– Sau khi bạn đã thực hiện việc push local branch thành công, thì trong các lần push sau, tên branch đã push sẽ xuất hiện trong phần Destination > Remote như hình bên dưới

push-local-branch-2nd

– Và màn hình kết quả sẽ không còn hiển thị [new branch] nữa

push-local-branch-success-2nd

Fetching the remote branch (lấy nhánh trên Git server về local)

– Sau khi bạn tạo branch (nhánh) mới và push nó lên Git server, những người khác muốn fetch nhánh đó về máy của họ, họ có thể làm như sau: click phải và chọn Create Branch …

create-branch-from-remote

– Tại cửa sổ hiện ra bạn điền tên branch vào mục Name, và chọn branch (nhánh) trên Git server mà bạn muốn lấy về (trong ví dụ này là remotes/origin/branch1) và nhấn OK

name-remote-branch

– Bạn có thể đánh dấu check vào Switch to new branch để tự động chuyển sang branch mới sang khi lấy về, hoặc bạn có thể chuyển branch theo hướng dẫn phía trên. Và đây là kết quả mỗi khi bạn commit và push lên nhánh mới sau khi chuyển nhánh.

push-local-branch-3rd

Merge branch (gộp nhánh)

– Khi chúng ta muốn merge những thay đổi của branch (nhánh) hiện tại đang làm việc vào branch master (nhánh chính), chúng ta sử dụng menu Checkout/Switch để chuyển sang lại branch master

switch-to-master-branch

– Tiếp theo chúng ta sẽ sử dụng menu Merge … để gộp nhánh (merge branch)

merge-branch

– Tại cửa sổ hiện ta, chúng ta sẽ chọn nhánh muốn merge vào nhánh master (trong ví dụ này chúng ta sẽ chọn nhánh branch1 để merge vào master)

merge-branch1-to-master

– Sau khi việc merge branch ở local đã được hoàn tất, đừng quên mọi thay đổi mới chỉ ở local, chúng ta cần push tất cả những thay đổi sau khi merge nhánh lên Git server. Ở đây chúng ta sẽ push nhánh master sau khi được merge thêm từ branch1 lên nhánh master ở trên Git server.

push-local-master-to-remote-master

Xóa nhánh ở local (Deleting the local branch)

– Sau khi đã merge 1 nhánh vào nhánh master, nếu không còn sử dụng nhánh đó bạn có thể xóa nhánh đó ở local bằng cách sau: menu chuột phải và chọn Checkout/Switch

checkout-switch-to-delete-local-branch

– Tiếp theo chọn […] để hiện ra toàn bộ nhánh ở local như hình bên dưới, chọn mục Refs > heads và xóa nhánh bằng cách chọn Delete Branch

delete-local-branch

Xóa nhánh trên Git server (Delete the remote branch)

– Để xóa nhánh không còn xài đến trên Git server, bạn làm tương tự như cách xóa nhánh local, nhưng ở mục Refs sẽ chọn remote

delete-remote-branch

Một số bài học thực tiễn về Ruby On Rails

Học lập trình điều quan trọng nhất là luôn thực hành, làm những bài tập thực tiễn sẽ giúp cho các lập trình viên mau lên tay nghề và kỹ năng code. Dưới đây là tổng hợp các bài viết về Ruby On Rails dưới dạng làm những project thực tế:

Kênh Youtube Mackenzie Child (bạn có thể xem tại website cá nhân của Mackenzie Child tại đây)
How To Build A Reddit Clone With Rails 4 (Xây dựng trang web tương tự Reddit với Rails 4)
How to build a blog in Rails 4 (Xây dựng trang blog với Rails 4)
How To Build A Pinterest Clone With Rails 4 (Xây dựng trang web tương tự mạng xã hội Pinterest với Rails 4)
How To Build A Movie Review App With Rails 4 (Xây dựng trang web đánh giá phim với Rails 4)
How To Build A Todo App With Rails 4 (Xây dựng trang web lưu những việc phải làm với Rails 4)
How To Build A Jobs Board With Rails 4 (Xây dựng trang web việc làm với Rails 4)
How To Build A Wikipedia Clone With Rails 4 (Xây dựng trang web bách khoa toàn thư Wikipedia với Rails 4)
How To Build A Forum With Rails 4 (Xây dựng trang diễn đàn với Rails 4)
– How To Build A Online Notebook App With Rails 4 (Xây dựng trang web ghi chú online với Rails 4)
– How To Build A Dribbble Type App In Rails 4 (Xây dựng trang web tương tự Dribbble với Rails 4)
– How to build a podcast network with Rails 4 (Xây dựng mạng xã hội âm nhạc và video với Rails 4)
– How to build a blog & portfolio with Rails 4 (Xây dựng 1 trang blog và portfolio với Rails 4)

Trang web Medium.com:
How to develop a social network using Ruby on Rails (Xây dựng trang mạng xã hội đơn giản với Ruby On Rails)

Kênh Youtube RailsCasts Reloaded: đây là kênh Youtube tổng hợp tất các video của website railscasts.com sau khi chủ nhân của RailsCasts đã không cập nhật từ khá lâu (năm 2013). Nếu bạn đang tìm những tutorial nâng cao về Ruby On Rails thì đây là địa chỉ không thể thiếu. Kênh này gồm 3 playlist chính

RailsCasts
RailsCasts REVISED
RailsCasts PRO

Trang web GoRails: nơi đây cũng tập hợp khá nhiều bài viết hay về Ruby On Rails, một số video miễn phí, và một số video bạn phải trả phí thành viên là 9$/tháng để có thể truy cập được.

Kênh Youtube Stuk.io: chỉ có khoảng 10 video về Ruby On Rails tại kênh này tuy nhiên chúng đều khá hữu dụng cho những người mới bắt đầu cũng như đã có kinh nghiệm lập trình Rails.

Trang web Sitepoint.com:
Build an Online Store with Rails (Xây dựng trang web bán hàng với Rails)

Trang web pchm.co:
How to Build a CMS in Ruby on Rails (Xây dựng CMS – hệ thống quản lý nội dung với Ruby On Rails)

Trang web modular-rails.samurails.com:
Modular Rails (Viết ứng dụng CRM đơn giản bằng Ruby On Rails theo kiểu module rồi đóng gói lại thành gem ruby)

….

Bài viết vẫn tiếp tục cập nhật

Thêm kích thước ảnh mới cho Media Library

– Khi upload ảnh vào media library, WordPress sẽ tạo nhiều kích thước khác nhau từ ảnh được upload. Các kích thước đó là:

+ thumbnail (mặc định tối đa là 150x150px)
+ medium (mặc định tối đa là 300x300px)
+ large (mặc định tối đa là 640x640px)
+ full (kích thước ban đầu của ảnh)

– Tùy thuộc vào kích thước ban đầu mà WordPress có tạo đủ 4 kích thước hay không. Trong bài viết này chúng ta sẽ học cách sử dụng WordPress filter có tên là image_size_names_choose để thêm vào 6 kích thước có tên là PC 1, PC 2, PC 3, PC 4, Mobile 1, Mobile 2 (đặt tên khác tùy bạn) với kích thước là 1920×1280, 65×43, 537×437, 182×122, 1440×750, 640×427. Thêm đoạn code sau vào file functions.php của theme