Lập trình PHP nâng cao – Học lập trình, học sử dụng máy tính từ số 0 – ZeZo.dev https://zezo.dev Wed, 11 Dec 2024 08:36:25 +0000 vi hourly 1 https://wordpress.org/?v=6.7.1 https://zezo.dev/wp-content/uploads/2024/11/cropped-zzel-32x32.png Lập trình PHP nâng cao – Học lập trình, học sử dụng máy tính từ số 0 – ZeZo.dev https://zezo.dev 32 32 Code kiểm tra hợp lệ tên đăng nhập trong PHP https://zezo.dev/view/code-kiem-tra-hop-le-ten-dang-nhap-trong-php Wed, 11 Dec 2024 08:36:25 +0000 https://zezo.dev/?p=424 $ten_dang_nhap = 'nguyenvana'; $bieu_thuc = '/^[a-zA-Z0-9_]{5,30}$/'; if(!preg_match($bieu_thuc, $ten_dang_nhap)){ echo "Ten dang nhap khong hop le"; }else{ echo "Ten dang nhap OK"; } ]]> Tạo log tùy chỉnh trong Laravel https://zezo.dev/view/tao-log-tuy-chinh-trong-laravel Sun, 01 Dec 2024 17:52:51 +0000 https://zezo.dev/?p=406 Bước 1: Tạo 1 file CreateCustomLogger.php ở trong thư mục App\Logging\
<?php

/**
 * Created by Zezo.dev.
 * User: MRS
 * Date: 3/29/2018
 * Time: 16:36
 */

namespace App\Logging;

use Monolog\Formatter\LineFormatter;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

class CreateCustomLogger
{
    public function __invoke(array $config)
    {
        //Chú ý thứ tự mức độ log, lần lượt từ trái qua phải, cái nào viết trước thì phải viết trước
        //debug, info, notice, warning, error, critical, alert, emergency.
        $arrLevel = ['logs/debug.log' => Logger::DEBUG,
            'logs/info.log' => Logger::INFO,
            'logs/notice.log' => Logger::NOTICE,
            'logs/warning.log' => Logger::WARNING,
            'logs/error.log' => Logger::ERROR,
            'logs/critical.log' => Logger::CRITICAL,
            'logs/alert.log' => Logger::ALERT,
            'logs/emergency.log' => Logger::EMERGENCY
        ];
        $uri = @$_SERVER['REQUEST_URI'];
        $logger = new Logger('S');

        foreach ($arrLevel as $file => $level) {
            $stream = new StreamHandler(storage_path($file), $level, false);
            $stream->setFormatter(new LineFormatter(
                "[%datetime%] %channel%.%level_name%: %message% %context% %extra% #$uri\n",
                null,
                false,
                true
            ));
            $logger->pushHandler($stream);
        }


 // cách sử dụng
//        throw new Exception('Demo loi'); // thả ra 1 cái exception
//        throw  new AccessDeniedException("Khong co quyen su dung");
//        trigger_error('Demo trigger eror type E_USER_NOTICE',E_USER_NOTICE);
//        trigger_error('Demo trigger eror type E_USER_WARNING',E_USER_WARNING);
//        trigger_error('Demo trigger eror type E_USER_ERROR',E_USER_ERROR);

//        $message = 'Test chuc nang log: ';
//
//        Log::emergency($message);
//        Log::alert($message);
//        Log::critical($message);
//        Log::error($message);
//        Log::warning($message);
//        Log::notice($message);
//        Log::info($message);
//        Log::debug($message);

        return $logger;
    }
}

 

Bước 2: Trong thư mục config/ mở file logging.php thêm vào mảng chanel nội dung sau:

   'custom' => [
            'driver' => 'custom',
            'via' => App\Logging\CreateCustomLogger::class,
        ],

Bước 3: Vào trong file cấu hình .env sửa chanel log thành custom

LOG_CHANNEL=custom

 

Bước 4: Thử nghiệm chức năng log

Vào action của 1 controller nào đó viết lệnh

      $message = 'Test chuc nang log: ';

       Log::emergency($message);
       Log::alert($message);
       Log::critical($message);
       Log::error($message);
       Log::warning($message);
       Log::notice($message);
       Log::info($message);
       Log::debug($message);

để chạy được bạn cần khai báo use cái class Log nhé

use Illuminate\Support\Facades\Log;

Khi chạy thử trên web xong, bạn vào thư mục storage/logs/ sẽ thấy các file log sinh ra theo từng loại.

Việc chia nhỏ file log ra từng loại sẽ giúp bạn kiểm soát log tốt hơn.

 

]]>
Quy trình tạo site đa ngôn ngữ với Laravel https://zezo.dev/view/quy-trinh-tao-site-da-ngon-ngu-voi-laravel Fri, 29 Nov 2024 17:46:52 +0000 https://zezo.dev/?p=305 1 – Trong thư mục resource tạo file ngôn ngữ
/resources
    /lang
        /en
            messages.php
        /vi
            messages.php

2 – Trong file route web.php tạo 1 route để thực hiện thiết lập locate

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
Route::get('/lang/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'vi'])) {
        abort(400);
    }
    App::setLocale($locale);

    Session::put('lang', $locale);
    return redirect()->back();

});

3 – Tạo midlware để thực hiện thiết lập locate:

Chạy lệnh: php artisan make:middleware Localization

4 – Vào file Kelnel.php thêm route midlware

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin'    =>   \App\Http\Middleware\GoToAdminPage::class,
        'localization' => \App\Http\Middleware\Localization::class,  // thêm dòng này
    ];

5 – Vào file Localization.php sửa hàm handle như sau

public function handle(Request $request, Closure $next)
{

    $locale = Session::get('lang', config('app.locale'));
    
    if (! in_array($locale, ['en', 'vi'])) {
        abort(400);
    }

    App::setLocale($locale);

    return $next($request);
}

6 – Đặt tất cả các route cần dùng đa ngôn ngữ vào trong group

Route::group(['middleware' => 'localization'], function () {
   
 //---- cac route đa ngôn ngữ phải đặt trong này
    Route::get('/tool/md5.html', [ToolController::class,'Md5'])->name('frontend.tool.md5');


});

7 – Trên giao diện web làm thêm cái cờ để đổi ngôn ngữ:

https://www.flaticon.com/free-icon/south-korea_330591?related_id=330591#

<a href="/lang/en"><img src="/assets/img/uk.png" style="width:16px" /> English</a>
<a href="/lang/vi"><img src="/assets/img/vi.png" style="width:16px" /> Vietnamese</a>

8 – Trên các view dùng cấu trúc translate sau để dịch ngôn ngữ

{{__(‘tool.title_md5_generator’)}}

Cái chữ tool. Màu xanh là tên file ngôn ngữ được tạo trong thư mục lang/

OK đã xong, giờ trải nghiệm thử nhé.

]]>
Code chuyển tiếng Việt có dấu thành không dấu https://zezo.dev/view/code-chuyen-tieng-viet-co-dau-thanh-khong-dau https://zezo.dev/view/code-chuyen-tieng-viet-co-dau-thanh-khong-dau#respond Thu, 28 Nov 2024 08:17:30 +0000 https://zezo.dev/?p=32 Trong quá trình phát triển website hoặc ứng dụng, đặc biệt khi xử lý dữ liệu nhập từ người dùng bằng tiếng Việt, việc chuyển đổi chuỗi có dấu sang không dấu là một bước quan trọng. Điều này không chỉ giúp cải thiện SEO mà còn tạo ra các URL thân thiện với người dùng. Bài viết này sẽ hướng dẫn bạn cách sử dụng đoạn code PHP đơn giản để chuyển đổi các ký tự tiếng Việt có dấu thành không dấu.


Tại Sao Cần Chuyển Dấu Tiếng Việt Thành Không Dấu?

  1. Tối ưu hóa SEO: URL thân thiện giúp các công cụ tìm kiếm dễ dàng lập chỉ mục hơn, từ đó cải thiện thứ hạng trên trang kết quả tìm kiếm.
  2. Tránh lỗi mã hóa: Một số hệ thống không hỗ trợ tốt tiếng Việt có dấu, việc chuyển đổi sẽ giúp tăng tính tương thích.
  3. Cải thiện trải nghiệm người dùng: Dễ đọc, dễ nhớ và dễ nhập liệu hơn khi URL không chứa ký tự đặc biệt.

Đoạn Code PHP Chuyển Dấu Tiếng Việt Thành Không Dấu

Dưới đây là một đoạn mã mẫu sử dụng trong PHP để chuyển đổi các ký tự có dấu thành không dấu:

SpxRemoveCircuflex(_strConvert) { 
_strConvert = _strConvert.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');
 _strConvert = _strConvert.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e'); 
_strConvert = _strConvert.replace(/ì|í|ị|ỉ|ĩ/g, 'i'); 
_strConvert = _strConvert.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o'); 
_strConvert = _strConvert.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');
 _strConvert = _strConvert.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y'); 
_strConvert = _strConvert.replace(/đ/g, 'd'); 
_strConvert = _strConvert.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');
 _strConvert = _strConvert.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');
 _strConvert = _strConvert.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I'); 
_strConvert = _strConvert.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O'); 
_strConvert = _strConvert.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U'); 
_strConvert = _strConvert.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y'); 
_strConvert = _strConvert.replace(/Đ/g, 'D');
_strConvert = _strConvert.replace(/ /g, '-'); // dung cho url 
_strConvert = _strConvert.replace(/[^A-Za-z0-9\-]+/g, ''); // Removes special chars. 
_strConvert = _strConvert.replace(/-+/g, '-'); // Replaces multiple hyphens with single one. 
return _strConvert.toLowerCase();
 },

Cách Hoạt Động

  1. Thay thế ký tự có dấu bằng không dấu: Sử dụng hàm preg_replace() để chuyển đổi các ký tự tiếng Việt sang ký tự La-tinh tương ứng.
  2. Loại bỏ ký tự đặc biệt: Giữ lại chỉ các chữ cái, chữ số và dấu gạch ngang.
  3. Chuẩn hóa chuỗi: Đảm bảo không có nhiều hơn một dấu gạch ngang liên tiếp và chuyển toàn bộ chuỗi về chữ thường.

Ứng Dụng Thực Tế

  • Tạo URL thân thiện với SEO:
    $title = "Hướng dẫn sử dụng PHP để xử lý tiếng Việt";

    $slug = SpxRemoveCircumflex($title);

    echo $slug; // Kết quả: huong-dan-su-dung-php-de-xu-ly-tieng-viet
  • Xử lý tên tệp tải lên:
    $filename = "Ảnh chụp màn hình.jpg";

    $sanitizedFilename = SpxRemoveCircumflex($filename);

    echo $sanitizedFilename; // Kết quả: anh-chup-man-hinh.jpg

Lợi Ích Của Đoạn Code

  • Đơn giản và dễ sử dụng: Có thể tích hợp nhanh chóng vào mọi dự án PHP.
  • Hiệu suất cao: Không sử dụng thư viện bên ngoài, chỉ dựa vào hàm gốc của PHP.
  • Tùy biến dễ dàng: Bạn có thể bổ sung hoặc chỉnh sửa theo nhu cầu.
]]>
https://zezo.dev/view/code-chuyen-tieng-viet-co-dau-thanh-khong-dau/feed 0