ICTsharing - Blog chia sẻ kiến thức về ICT: Laravel

Hot

Post Top Ad

Hiển thị các bài đăng có nhãn Laravel. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Laravel. Hiển thị tất cả bài đăng

Thứ Ba, 12 tháng 3, 2019

Triển khai ứng dụng Laravel trên hosting

09:24 0

Có rất nhiều bạn lập trình PHP Framework laravel xong không biết cách triển khai ứng dụng (deploy) lên các host mua của các nhà cung cấp Nhân Hòa, Mắt bão có hệ thống quản lý CPanel, Plesk, ISPConfig.. hoặc trên các VPS, Các ứng dụng Laravel không được thiết kế để sử dụng luôn cho host dùng chung, các ứng dụng có điểm xuất phát đều từ file index.php nằm trong thư mục public. Do đó khi triển khai lên các host dùng chung sẽ phải có một số điều chỉnh. bài này mình sẽ hướng dẫn cách triển khai ứng dụng laravel sau khi thiết kế xong lên host để chạy cho domain.

1. Chuẩn bị tên miền và host
Tên miền và host các bạn thường mua và sử dụng của PA, Mắt bão, Nhân Hòa ... hoặc các bạn có thể mua domain và host quốc tế của godady, google, ...

(*) Ưu nhược điểm  host trong nước (viết ở khía cạnh mua của nhà cung cấp uy tín nhé)
 - Cho tốc độ load tốt hơn
 - Có người việt support
 - Một số hạn chế: băng thông giới hạn, tài khoản ftp, database cũng bị giới hạn.

 (*) Ưu nhược điểm host quốc tế:
 - Giá rẻ hơn hẳn trong nước, khoảng 4$/ tháng tương đương với gói khoảng 200k/ tháng của các nhà cung cấp trong nước…
 - Tài nguyên dùng thoải mái hơn, không giới hạn về dung lượng, băng thông, số lượng database…
 - Nhược điểm là cá mập cũng rất thích cắn cáp quang làm đường truyền ra quốc tế thỉnh thoảng cũng bị gián đoạn và thường tốc độ thấp hơn host trong nước.

2. Chuẩn bị source code và phần mềm Ftp
 - Phần này chúng ta chắc chắn không thể thiếu rồi, sử dụng phần mềm FTP để tải file lên server nhanh hơn. Thông thường nếu file không nặng, các bạn có thể sử dụng trực tiếp thông qua trình duyệt để tải lên host. Nhưng mình khuyên các bạn nên sử dụng FTP để tải file lên sẽ chủ động hơn nếu file nặng hoặc chỉnh sửa file. Phần mềm FTP thường sử dụng: FileZilla Client, WinSCP, FTP Cute ... mình đang sử dụng 2 cái đầu.

3. Cài đặt ứng dụng Laravel lên host
 Bước này là bước quan trọng nhất của bài viết này.
  • Giải nén file zip ra thư mục gốc thường là public_html.
  • Copy toàn bộ file trong thư mục public ra thư mục gốc public_html.
  • Chỉnh sửa file index.php trong thư mục gốc (đây chính là file được chuyển từ thư mục public ra thư mục gốc).
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
Thành

require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
  • Chỉnh sửa file server.php nằm trong thư mục gốc dự án từ:
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
    return false;
}

require_once __DIR__.'/public/index.php';
thành
if ($uri !== '/' && file_exists(__DIR__.'/'.$uri)) {
    return false;
}

require_once __DIR__.'/index.php';
  • Mở file .htaccess và thay đổi nội dung như sau để mọi request đến sẽ trỏ về file index.php ở thư mục gốc.
DirectoryIndex index.php
    Options -MultiViews
RedirectMatch 404 /\.git

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/index.php [L]
  • Mở file .env và thay đổi một số thông số
APP_URL=http://localhost
thành domain của bạn, vidu của mình là http://ictsharing.com
APP_URL=ictsharing.com 
Như vậy, chúng ta đã thiết lập xong ứng dụng Laravel để có thể chạy trên host dùng chung. Các bước thực hiện có ảnh hưởng nhiều đến source code do đó không chuẩn tắc. Nếu bạn có ý định triển khai một ứng dụng Laravel thì tốt nhất nên nghĩ đến máy chủ ảo VPS, sẽ phức tạp hơn khi chúng ta phải tự cài webserver như apache hoặc nginx, cơ sở dữ liệu mysql và một số các ứng dụng khác cho cache…
Xem thêm

Thứ Sáu, 8 tháng 3, 2019

Những nâng cấp chính trong bản Laravel 5.8

11:16 0

Dưới đây là một vài cập nhật quan trọng sắp tới của Laravel 5.8.

Email Validation

Validation Rule được xây dựng cho email của Laravel trong 5.8 giờ sẽ cho phép các ký tự international trong địa chỉ email.

Nếu bạn có đoạn code validattion sau:
$request->validate([ 'email' => 'email', ]);

Và cố gắng xác thực một địa chỉ email như hej@bär.se trong 5.7, nó sẽ thất bại. Tuy nhiên, nó sẽ pass validation trong 5.8 và là một địa chỉ email hợp lệ.

Trong 5.7, logic validation không khớp với logic được sử dụng bởi SwiftMailer (thư viện PHP mailer được sử dụng bởi Laravel), nhưng bây giờ cả hai đều tuân thủ tuân thủ RFC6530 .

dotenv 3.0:

Laravel 5.8 sẽ hỗ trợ relatively new dotenv 3.0 để quản lý tệp môi trường .env trong project của bạn.

Các tính năng mới quan trọng trong dotenv 3.0 là hỗ trợ cho multiline strings and white space ở cuối string trong file môi trường .env của bạn, ví dụ, đại loại như:
TEST_VAR="specialstringfor 
 this app"

Sẽ chỉ return specialstringfor, trong khi specialstringfor thisapp sẽ được phân tích cú pháp trong laravel 5.8. Nó cũng sẽ tôn trọng bất kỳ white space nào ở cuối string, trước đây đã bị tước khỏi các biến môi trường.

Đây là một bản cập nhật tuyệt vời cho các tình huống yêu cầu API KEY là multiline để bảo mật.

Thay đổi tên thư mục Mailables

Đây không phải là một tính năng mới nhưng là một yếu tố quan trọng bạn sẽ cần phải biết khi nâng cấp một dự án.

Nếu bạn có các thư trong dự án của bạn và bạn đã tùy chỉnh các thành phần bằng command php artisan vendor:publish, tên thư mục đã thay đổi một chút, cụ thể là /resources/views/vendor/mail/markdown hiện được đặt tên /resources/views/vendor/mail/text.

Template mới cho Error page

Laravel 5.8 sẽ xuất xưởng với các trang lỗi mới có thiết kế rất tối giản, phù hợp hơn cho một loạt các trang web và ứng dụng web mà không cần phải thiết kế lại để phù hợp với chủ đề.

Trang 404 của Laravel 5.7 ở trên. Trang 404 của Laravel 5.8 ở dưới
Bạn vẫn có thể tùy chỉnh các trang lỗi hoặc nhập các thiết kế trước đó của bạn nếu bạn thích chúng.

Array and String helper functions are deprecated

Tất cả function helper array_*và str_* sẽ không còn được chấp nhận và sẽ bị xóa trong Laravel 5.9. Các facades Arr::và Str:: được sử dụng thay thế. Sẽ có các packages available để maintain chức năng nếu bạn không thể hoặc không muốn viết lại code đã tồn tại nhưng nên làm quen với các lệnh mới ngay bây giờ nếu bạn cần sử dụng chúng.

Một hàm array_ hiện có, chẳng hạn như:

function array_add($array, $key, $value)

Nên thay thế bằng:

Arr::add($array, $key, $value)

Tương tự như các string helper function:

function str_contains($haystack, $needles)

Nên thay thế bằng:

Str::contains($haystack, $needles);

Caching - ttl bây giờ tính bằng giây thay vì phút

Nếu bạn đang sử dụng các chức năng caching của Laravel, hãy lưu ý rằng nếu bạn chuyển một số nguyên cho cache function trong 5,8 thì nó sẽ áp dụng live time trong vài giây chứ không phải vài phút như hiện tại là 5.7, vì vậy lệnh này:
Cache::put('foo', 'bar', 30);
Sẽ lưu trữ data trong 30 phút trong Laravel 5.7 và 30 giây trong Laravel 5.8. Một sự khác biệt đơn giản nhưng quan trọng!

JSON values trong MySQL

Nếu bạn đang lưu trữ JSON values trong column của MySQL và MariaDB, trong 5.7 Laravel sẽ trả về các giá trị được wrapped trong dấu ngoặc kép. 5.8 sẽ trả về giống như thế nhưng clear hơn.

Sau đây là ví dụ từ hướng dẫn nâng cấp Laravel minh họa cho sự thay đổi:
$value = DB::table('users')->value('options->language');

dump($value);

// Laravel 5.7…
'"en"'

// Laravel 5.8…
'en'

Hỗ trợ phiên bản Carbon 2

Bây giờ bạn sẽ có tùy chọn sử dụng Carbon 1 hoặc Carbon 2 cho các chức năng DateTime của bạn trong Laravel 5.8. Xem hướng dẫn Carbon migration nếu bạn có ý định sử dụng Carbon 2.

Nexmo và Slack Notification channels

Các chanel notification Nexmo và Slack đã bị xóa khỏi main project của Laravel và được trích xuất thành các first-party packages.

Để tiếp tục sử dụng chức năng Slack hoặc Nexmo trong dự án của bạn, bạn sẽ cần sử dụng:
composer require laravel/nexmo-notification-channel 
composer require laravel/slack-notification-channel


Sau đó chúng có thể được cấu hình và sử dụng như trước đây.

Trên đây là nhưng thay đổi chính trong Laravel 5.8 mà tôi đã đề cập, hy vọng giúp ích được cho các bạn
Xem thêm

Phiên bản laravel 5.7 nâng cấp có gì mới?

11:09 0

Phiên bản PHP framework laravel 5.7 yêu cầu PHP >= 7.1.3.

Sau khi phát hành Laravel 5.7, Laravel 5.6 sẽ tiếp tục fix bug cho đến ngày 7/8/2018 và sửa các lỗi bảo mật cho đến ngày 7/2/2019.

Tương tự, Laravel 5.7 sẽ nhận hỗ trợ fix bug và các lỗi bảo mật cho đến tháng 2/2019 và tháng 8/2019.

Laravel đã liên tục bổ sung các tính năng hữu ích kể từ lần phát hành đầu tiên. Phiên bản 5.7 sắp tới cũng sẽ có rất nhiều tính năng thú vị.

Các tính năng chính được nâng cấp ở phiên bản này: Laravel Nova, tùy chọn xác minh email cho thành viên đã đăng nhập, hỗ trợ cho guest (người dùng chưa đăng nhập) trong gates và policies, tích hợp Symfony dump-server, đa ngôn ngữ khi thông báo.

Laravel Nova


Laravel Nova là một package mới trong Laravel tạo ra một trang quản trị admin. Giúp tiết kiệm thời gian để tạo một trang quản trị admin. Có thể cài đặt trong project mới của bạn, cả project hiện tại thông qua composer.

Laravel Nova hỗ trợ cho cả laravel 5.6, sử dụng Vuejs, Vue Router và Tailwind (một framework CSS rất tiện ích) làm giao diện.

Laravel Nova xây dựng sẵn CRUD cơ bản đến tìm kiếm phức tạp, bộ lọc filters, số liệu, thống kê, video...

Bạn có thể tìm hiểm thêm về Package này trên link chính thức https://nova.laravel.com/

Email Verification

Nếu bạn đã quá quen thuộc với hệ thống authentication mặc định của laravel. Thì hiện nay, Laravel đã có tùy chọn xác minh email cho người dùng.

Một cột mới email_verified_at đã được thêm vào bảng users. Bạn không cần phải tự thêm bằng tay vào, nó đã đi kèm trong migrations rồi. Bạn chỉ cần chạy câu lệnh: php artisan migrate là ok

User Model cần implement MustVerifyEmail interface để đề xuất user mới xác minh địa chỉ email của họ. Vì vậy, User Model của bạn sẽ như dưới đây:
<?php 
// App/User.php namespace App; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Contracts\Auth\MustVerifyEmail; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
 
class User extends Authenticatable implements MustVerifyEmail 
{ 
    // ... 
} 
Sau khi implement MustVerifyEmail interface, user mới đăng ký nhận được email có

chứa liên kết xác minh để kích hoạt tài khoản. Vì vậy, khi người dùng nhấn vào liên kết, tài khoản sẽ được kích hoạt.

Cùng với việc xác minh email, Laravel 5.7 cũng cung cấp middleware giới hạn cho các email được xác minh. Vì vậy, điều này rất hữu ích và hữu ích cho các function trong backend.
'email_verified'=> \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
Để các routes của bạn chỉ cho các email được xác minh, hãy gắn middleware trong các routes.
Route::get('info', function () {
    //
})->middleware('email_verified');

Guest User Gates / Policies

 Guest User Gates là một tính năng hữu ích khác có trong Laravel 5.7. Hiện tại, Laravel trả về false khi người dùng cố gắng truy cập các route mà chưa được xác thực. Nhưng trong laravel 5.7, bạn có thể ép kiểu về mode hoặc bất cứ thứ gì hoặc đơn giản là trả về null trong các mục đích phù hợp.
Gate::define('update-page', function (?Admin $admin, Page $page) {
    // ...
});


Symfony Dump Server




Bạn đã bao giờ nghĩ đến việc dump data ra một file HTML bên ngoài? Sắp tới, Laravel 5.7 sẽ có một tính năng tích hợp cho việc này. Bạn có thể chỉ cần làm 1 việc đơn giản là đổ dữ liệu của bạn vào file html.

Lệnh này rất tiện dụng và rất hữu ích cho việc debug mà không làm gián đoạn thời gian chạy ứng dụng.
php artisan dump-server
 
# Or send the output to an HTML file
php artisan dump-server --format=html > dump-server-test.html

Lệnh này chạy ngầm trên server. Nó nhận dữ liệu được gửi từ ứng dụng và hiển thị thông qua bảng điều khiển (console). Bạn không bao giờ phải lo lắng khi chạy lệnh này, vì khi lệnh này không chạy thì dump() hoạt động như mặc định.

Bạn có thể tìm thêm thông tin về package này trên github.

Notification Localization

Trong laravel 5.7, bạn có thể gửi thông báo khác với ngôn ngữ hiện tại. Để làm điều này, bạn cần phải chỉ định ngôn ngữ mà bạn sẽ sử dụng trong thông báo trong phương thức locale(). Ví dụ:
$user->notify((new CreatePost($admin))->locale('jp')); 
Hoặc cũng có thể thông qua Notification facade:
Notification::locale('jp')->send($admin, new CreatePost($user));

Cải thiện thông báo lỗi




Bạn có thể theo dõi các thông báo lỗi dễ dàng hơn trong laravel 5.7. Lý do là vì Laravel 5.7 sử dụng package mới được phát triển bởi Joseph Silber. Nó sẽ hiển thị thông báo lỗi trên dynamic calls và Eloquent models.

URL Generator and Callable Syntax

Trong Laravel 5.7, chúng ta có thể lấy url theo cú pháp mới. Lợi ích chính của cú pháp mới này là bạn có thể điều hướng trực tiếp đến controller của nó.
<?php
// PagesController is a controller
// index is a method name inside controller
 
$url = action([PagesController::class, 'show']);

Thay đổi đường dẫn resources

Sẽ có một chút thay đổi trong thư mục resources ở Laravel 5.7. Thư mục assets sẽ bị xóa và thư mục js sass sẽ không có trong resources.

"Khi bạn nâng cấp phiên bản Laravel, bạn không cần phải tạo lại thư mục resources/assets theo cấu trúc thư mục mới. Nó sẽ hoạt động theo cấu trúc cũ." - Taylor Ottwell.

Paginator Links

Tính năng nhỏ bé này trong laravel 5.7 có thể hữu ích trong nhiều trường hợp. Tính năng này sẽ giúp kiểm soát số lượng liên kết trang được hiển thị ở mỗi bên của dấu phân cách.

Nếu bạn đã sử dụng paginations trước đó thì bạn có thể nhận thấy sẽ có link của 3 trang theo mặc định. Nhưng, bạn có thể xác định rõ ràng trong laravel 5.7.
{{ $paginator->onEachSide(4)->links() }}

Filesystem Read / Write Streams

Flysystem của Laravel sẽ cung cấp các phương thức readStream và writeStream:
Storage::disk('s3')->writeStream(
    'remote-file-test.zip',
    Storage::disk('local')->readStream('local-file-test.zip')
);

Đó là những gì mình đã cóp nhặt được từ: viblo và trang chủ của laravel.

Xem thêm

Thứ Tư, 23 tháng 1, 2019

Khóa Học Laravel 5.7 - Xây Dựng Website Thương Mại Điện Tử Hoàn Chỉnh Tích Hợp Cổng Thanh Toán PayPal

17:07 0


Nội dung khóa học:
+ Cách cài đặt Laravel.
+ Làm thế nào để tạo một dự án / trang web hoàn chỉnh trong Laravel.
+ Tích hợp Bootstrap 4.
+ Tích hợp hệ thống thanh toán Paypal vào ứng dụng Laravel.
+ Hiển thị hình ảnh trên Heroku.
+ Tích hợp Plugin Gloudemans Shoppingcart vào ứng dụng.
+ Cách tạo trang web thương mại điện tử trong Laravel.
+ Tìm hiểu về Route.
+ Tìm hiểu cách sử dụng các lệnh thủ công trong PHP.
+ Tìm hiểu cách tạo Model và Controller.
+ Tìm hiểu cách tạo View bằng Blade.
+ Kết nối website với cơ sở dữ liệu và tạo bảng.
+ Nhận sản phẩm từ cơ sở dữ liệu và hiển thị chúng cho khách hàng.
+ Tìm hiểu về Blade & Cách sử dụng các tính năng quan trọng nhất của nó.
+ Tạo giỏ hàng, hiễn thị giá và số lượng.
+ Chuyển hướng người dùng đến các trang cụ thể.
+ Xóa các mục từ giỏ hàng.
+ Tạo xác thực người dùng bằng cách sử dụng Laravel Auth.
+ Chia sẻ dữ liệu với tất cả các lượt xem.
+ Tạo Admin Dashboard đến bảng điều khiển tất cả sản phẩm.
+ Cập nhật trường sản phẩm.
+ Upload và Update hình ảnh sản phẩm.
+ Tạo mới sản phẩm bằng cách sử dụng Admin Dashboard.
+ Xóa sản phẩm khỏi cơ sở dữ liệu bằng Admin Dashboard.
+ Restrict Access To Admins Only.

Bạn sẽ tìm hiểu cách viết code cho ứng dụng web thương mại điện tử của riêng bạn bằng cách sử dụng framework mạnh mẽ và thân thiện với người dùng nhất có sẵn cho các nhà phát triển web, Laravel.

Đến cuối khóa học, bạn sẽ được hướng dẫn tích hợp Hệ thống thanh toán PayPal vào ứng dụng của bạn.
Nếu bạn có kiến ​​thức cơ bản về Laravel và bạn muốn nâng cao kiến thức - khóa học này chắc chắn là dành cho bạn.

Tên khóa học tiếng Anh: Laravel 5.7: E-Commerce Shop Website with PayPal System.

LINK TẢI KHÓA HỌC: tại đây

Password giải nén nếu có: www.ictsharing.com
Xem thêm

Cách sử dụng $(document).ready trong blade laravel 5.7

11:41 0

Khi nhúng hàm $(document).ready vào blade trong laravel mãi vẫn không thể chạy được mà không biết lý do vì sao.
Bài này sẽ hướng dẫn các bạn cách làm việc với các file và javascript trong laravel 5.7

Cho file Jquery Script:
<script src="{!!url('/js/jquery.min.js')!!}"></script>
Cho phần nội dung:
@extends('layouts.app')
@section ('content')
Settings main page

<script type="text/javascript">
    $(document).ready(function() {
        alert("Settings page was loaded");
    });
</script>

@endsection

Thay vì tạo scripting trong phần nội dung, cách tốt hơn và chuyên nghiệp hơn là tạo một phần khác để tạo kịch bản trong app.blade.php

Bình thường mình làm theo cách sau:

<html>
  <head> 
    @yield('page-style-files')
  </head>

  <body>
    <div class="wrapper">
     @yield('content')
    </div>
  </body>

  @yield('page-js-files')
  @yield('page-js-script')

<html>
Vi dụ các trang nhánh sẽ như sau:

@extends('layouts.app')
@section ('content')
  Settings main page    
@endsection

@section('page-style-files')
 <link href="....css" />
@stop


@section('page-js-files')
 <script src=".....js"></script>
@stop

@section('page-js-script')
<script type="text/javascript">
    $(document).ready(function() {
        alert("hello ictsharing.com");
    });
</script>
@stop





Xem thêm

Post Top Ad

Your Ad Spot