Xây dựng FuelPHP Framework thân thiện với Developer hơn



  • Giới thiệu về FuelPHP framework:

    Framework này được bắt đầu vào cuối năm 2010 bởi Dan Horrigan cùng với Phil Sturgeon, Jelmer Schreuder, Harro Verton and Frank de Jonge. Vào cuối tháng 8/2011 thì bản 1.0 đã được public. một điều mình thích ở thằng này đó là nó đơn giản, linh hoạt và hoạt động trên PHP 5.3. Bộ core chỉ nặng ~ 6MB mà thôi.

    Xem thêm tại đây: [https://viblo.asia/p/tim-hieu-ve-fuel-php-jvElaOmNKkw]

    Một vài so sánh:

    PROS

    Laravel FuelPHP
    Open source Open source
    Clean architecture Faster than laravel
    Growing community
    Dependency injection
    Application architecture
    Embraces good community packages
    Restful routing
    Easy to learn, scalability

    CONS

    Laravel FuelPHP
    Does NOT work on Shared hosting plans Not very beginner friendly (slim support documentation)
    . It is a relatively new framework with less support
    Open source Community contributions are less than others (like Laravel and Phalcon)

    OTHERS

    Laravel FuelPHP
    Keep up to date and support the latest technology

    Đôi điều

    Về tuổi đời FuelPHP cũng không phải nhỏ, thậm trí sinh trước cả Laravel (Laravel 1 ra đời khoảng tháng 6 năm 2011). Nhưng đến nay phiên bản release cuối cùng là 1.8, bản 1.9 develop đang trong quá trình hoàn thiện (đã rất lâu rồi :( ). So sánh với laravel đã có bản 5.6 phần nào nói lên được quy mô của framework.

    Có thể bạn chưa biết, khi clone source code về, FuelPHP rất tâm lý đã chuẩn bị sẵn cho chúng ta cả file composer.phar để ta chỉ việc dùng :D, không sử dụng NPM để quản lý package, không file environment, không dùng webpack hay chưa tích hợp blade.

    Nói thế để thấy khi chuyển từ Laravel sang FuelPHP có thể coi là sự khổ ải. Nhưng không hẳn là FuelPHP kém cỏi, về bản chất là một framework nhỏ, nhẹ nên tốc độ và performace của nó tốt hơn Laravel khá nhiều.

    Tổng quan lại sẽ là hơi tù nếu phải code trên FuelPHP. Nhưng một khi khách hàng đã thích thì ta phải chiều, bây giờ là làm thế nào để Dev code dễ và thoải mái hơn lại tốt cho dự án thôi.

    1. Thêm .env để config biến môi trường.

    • Thêm vlucas/phpdotenv vào require của composer.json và chạy composer update

    • Thêm file .env.example chung cho dự án.

    • Tạo file .env local

    • Thêm đoạn khởi tạo và load nội dung ENV

      require COREPATH.'bootstrap.php';
      
      //Config to load .env
      require VENDORPATH . '/autoload.php';
      $dotenv = new Dotenv\Dotenv(APPPATH);
      $dotenv->load();
      

    2. Sử dụng NPM vs Webpack để build assets (js, css, ...) files.

    • Thêm file package.json với các scripts, devDependencies, dependencies cần thiết:

      Example:

      {
        "private": true,
        "scripts": {
          "dev": "npm run development",
          "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
          "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
          "watch-poll": "npm run watch -- --watch-poll",
          "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
          "prod": "npm run production",
          "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
        },
        "devDependencies": {
          "cross-env": "^3.2.3",
          "dotenv": "^4.0.0",
          "jquery": "^3.1.1"
        },
        "dependencies": {
          "bootstrap": "^3.3.7",
          "laravel-mix": "^1.6.1"
        }
      }
      
    • Thêm file webpack.mix.js:

      Example:

      const { mix } = require('laravel-mix');
      
      /*
       |--------------------------------------------------------------------------
       | Mix Asset Management
       |--------------------------------------------------------------------------
       |
       | Mix provides a clean, fluent API for defining some Webpack build steps
       | for your Laravel application. By default, we are compiling the Sass
       | file for the application as well as bundling up all the JS files.
       |
       */
      
      mix
          .styles([
              'node_modules/bootstrap/dist/css/bootstrap.min.css',
          ], 'public/assets/css/vendor.css');
      
      

      Bây giờ bạn có thể install các package với npm hoặc yarn (Recommended). Và npm run dev để build file.

    3. Sử dụng Twig làm blade cho view.

    Nếu code của bạn cứ phải <?php echo ...; ?> ... thì thật là khủng khiếp (sohai). Vì vậy cần lắm một blade giúp ta làm việc đó, và thật may bản thân Fuel cũng phần nào support ta những template engine như smarty hay twig. Và tất nhiên là ta chọn Twig rồi vì cơ bản nó cũng là một engine từ Symfony. Giờ thì ô tô kề để thêm nó vào đây :-ss

    • Installation thông qua composer:

      composer require "twig/twig:^2.4"
      
    • Thêm Twig_Fuel_Extension vào Autoloader (File: fuel/app/bootstrap.php)

      \Autoloader::add_classes([
          // Add classes you want to override here
          // Example: 'View' => APPPATH.'classes/view.php',
          'Twig_Fuel_Extension' => APPPATH . 'classes/twig/fuel/extension.php',
      ]);
      
    • Thêm package parser vào always_load trong file fuel/app/config/config.php

      /**************************************************************************/
      /* Always Load                                                            */
      /**************************************************************************/
      'always_load' => [
      
          /**
           * These packages are loaded on Fuel's startup.
           * You can specify them in the following manner:
           *
           * array('auth'); // This will assume the packages are in PKGPATH
           *
           * // Use this format to specify the path to the package explicitly
           * array(
           *     array('auth'    => PKGPATH.'auth/')
           * );
           */
          'packages' => [
              'parser'
          ],
      ],
      
    • Tạo thư mục fuel/app/classes/twig/fuel/ và file extension.php. Đây là file chúng ta sử dụng để định nghĩa các hàm sử dụng thêm trong view với mục đích của bạn.

      Example:

      <?php
      
      class Twig_Fuel_Extension extends \Parser\Twig_Fuel_Extension
      {
          public function getFunctions()
          {
              return array_merge(
                  parent::getFunctions(), [
                      /*
                       * Define a new function Twig
                       * Example form button
                       */
                      new Twig_SimpleFunction('checkisset', array('Twig_Classes_Extension', 'isset')),
                      new Twig_SimpleFunction('is_active', function ($router) {
                          return isActive($router);
                      }),
                      new Twig_SimpleFunction('isset_error', function ($error) {
                          return issetError($error);
                      }),
                      new Twig_SimpleFunction('old_input', function ($input) {
                          return oldInput($input);
                      }),
                      new Twig_SimpleFunction('getUserInformation', function ($field) {
                          return Auth::get($field);
                      }),
                      new Twig_SimpleFunction('isAdmin', function ($role) {
                          return Model_User::isAdmin($role);
                      }),
                  ]
              );
          }
      }
      

    Như vậy FuelPHP giờ thân thiện và dễ code hơn rồi =))

    Và cuối cùng cũng là quan trọng nhất:

    Nếu thấy hữu ích tín dụng cho mình nhé =))

    Cú pháp:

    @bach.dang.hung +50 #ThankForShare #GoodJob :)
    

    Nguồn: Viblo


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.