Posts

Showing posts from 2023

Deploy website lên VPS hoặc Hosting với Gitlab CI/CD

Image
  Deploy website lên VPS với Gitlab CI/CD Sau một thời gian code ra được môt trang web xịn xò thì bạn có nhu cầu đưa lên internet để mọi người được biết. Bắt đầu với công việc đầu tiên là tìm mua tên miền, hosting hoặc VPS. Bạn có thể mua VPS tại Hostinger hoặc Vultr,... 1 VPS có thể cài đặt được nhiều trang web. Như vậy sau quá trình chuẩn bị thành công, chúng ta sẽ đẩy code từ local lên hosting, server. Quá trình này khá là mất công. Cách cổ điển hiện nay được nhiều người dùng là dùng FTP, hoặc upload thằng từ các trang quản lý. Đây là công việc khá nhàm chán, tốn thời gian. Khi có một thay đổi nhỏ là phải đi thao tác lại. Chính vì vậy khái niệm CI/CD ra đời. CI/CD là một bộ đôi công việc, bao gồm CI ( Continuous Integration ) và CD ( Continuous Delivery ), ý nói là quá trình tích hợp (integration) thường xuyên, nhanh chóng hơn khi code cũng như thường xuyên cập nhật phiên bản mới (delivery). Có khá nhiều công cụ hỗ trợ CI/CD, nhưng trong phạm vi bài viết chỉ đề cập công cụ CI/CD của

PHP - Chuyển đổi ngày giờ thành thời gian (1 tiếng trước, 1 ngày trước, 1 tháng trước, 1 năm trước)

Thỉnh thoảng thì bạn sẽ thấy 1 số trang blogs, trang thương mại điện tử phần ngày tháng họ sẽ hiển thị kiểu : - vài giây trước - 1 giờ trước - 1 ngày trước - 2 tuần trước - 1 tháng trước - ... Vậy làm thế nào để được như vậy? Trong PHP thì dễ dàng để thực hiện điều này. Bước 1: Cần chuẩn bị 1 function helper để chuyển đổi ngàu giờ. Cụ thể thì cần: function convert_time_elapsed_string($datetime) {     $now = new Datetime ;     $ago = new Datetime ($datetime);     $diff = $now->diff($ago);     $diff->w = floor($diff->d / 7);     $diff->d -= $diff->w * 7;     $str = array(          'y' => 'năm',          'm' => 'tháng',          'w' => 'tuần',          'd' => 'ngày',          'h' => 'tiếng'          'i' => 'phút',          's' => 'giây'      );     foreach($str as $key => &$value) {          if ($diff->$key) {               $value =

Laravel chuyển đổi ngôn ngữ trong email khi chạy lệnh command

- Nhiều thắc mắc đưa ra là mình có Middleware Locale rồi đã đặt trong Kernel rồi. - Trong API cũng set middleware('locale') rồi mà sau khi chạy command gởi mail ra nó không nhận file ngôn ngữ. Hiểu đơn giản là khi chạy 1 command nó không gọi bất cứ 1 API nào cả thì đâu có đi qua middleware đâu mà nhận locale. Để thực hiện translate nội dung mail khi chạy command thì từ Laravel 5.4 đã hổ trợ cài locale 1. Mail::to('abc@test.com') ->locale('nl') ->send(new InviteUserMail()); 2. Trong file .blade.php bạn phải đổi thành Thay vì: Dear Administrator thì phải đổi thành {{__('Dear Adminitrator')}} << với cặp {{}} và __() thì việc chuyển đổi ngôn ngữ trong blade template mới được thực hiện. Một lưu ý: file chuyển ngôn ngữ phải là file .json và đặt ở lang/nl.json chỉ với ->locale('language') thì chắc chắn nội dung mail của bạn sẽ được dịch

Laravel Unit Test - Test Job

Bài này thì cơ bản về cách test 1 job được đưa vào hàng đợi hay chưa? và test mock service của một bên thứ 3 như thế nào 1. Import những thư viện cần thiết: use Bus; use Illuminate\Testing\Fluent\AssertableJson; use Mockery; use Mockery\MockInterface; Trong đó thì:  - Bus dùng để gửi một lệnh đến trình xử lý thích hợp của nó. - AssertableJson dùng để kiểm tra kết quả trả về - Mockery dùng để mock các dịch vụ của bên thứ 3 - MockInterface dùng để định nghĩa định dạng 2. Gọi function test public function test_user_can_check_device_but_dont_know_serial() {     // Giả lập môi trường sẽ gởi lệnh     Bus::fake();     // Gọi đến dịch vụ của bên thứ 3     $this->instance(         MSService::class,             Mockery::mock(MSService::class, function (MockInterface $mock) {                 $mock->shouldReceive('requestToTenant') // function nào được gọi                       ->withAnyArgs() // Chấp nhận mọi tham số                       ->once() // Ngụ ý gọi 1 l

Laravel Unit Test - Test Mail

Đầu tiên về nội dung Seri này là giới thiệu cơ bản về các loại test trong Laravel Bài này mình sẽ làm về test mail Các bước cơ bản như sau: 1. Thêm thư viện cần dùng: use Illuminate\Support\Facades\Mail; 2. Làm theo hướng dẫn: ``` public function testEmail() {      Mail::fake();      // Your post call here(API or JOB or COMMAND)     // Example call a command here       $this->artisan('command:commandname', [                'argurment' => 'test@testcommand.com',                '--option' => 'test.com'           ]);      Mail::assertSent(CommentPosted::class); // This is a mailable class           / / You can also check if the correct email was send      // by checking the data that was send to it      Mail::assertSent(CommentPosted::class, function ($mail) use ($user) {      return $mail->hasTo($user->email) &&                     $mail->hasCc('...') &&                     $mail->hasBc