3si-yii2 – A starter kit for every Yii2-based projects of 3S

AUTHOR: Hưng Nguyễn


Mỗi khi start 1 dự án sử dụng Yii2 (1 PHP framework), các bạn cuder 3S đã phát ngán với việc phải config, migration thủ công cho từng dự án?

Các công việc được lặp đi lặp lại: nào là config RBAC (Role Based Access Control), rồi lại config RESTful Web Services, config i18n (Internationalization), config separate session/cookies cho backend/frontend, xong rồi lại phát triển giao diện cho trang quản lý user, quản lý log, v.v…

Các chức năng:

  • Theme AdminLTE cho backend: đẹp + open source (MIT licensed)
  • Các ngôn ngữ: tiếng Anh, tiếng Việt, tiếng Nhật…
  • Quản lý các bản dịch
  • Action đổi ngôn ngữ + behavior đổi locale dựa theo ngôn ngữ của browser
  • Các màn hình đăng nhập, đăng ký, profile…
  • Xác thực OAuth
  • Quản lý User
  • RBAC sẵn với các quyền: khách, user thường, quản lý và admin
  • Hỗ trợ migrate RBAC
  • Các component quản lý nội dung: bài viết, thể loại, trang tĩnh, menu động, carousel động, text block
  • Component lưu giữ Key-value
  • Màn hình cài đặt Ứng dụng (dựa trên component KeyStorage)
  • Module RESTful API được config sẵn
  • Component quản lý file + widget upload file
  • Tự động tạo thumbnail bằng lib trntv/yii2-glide
  • Command Bus with queued and async tasks support trntv/yii2-command-bus
  • Các behaviors hữu dụng (GlobalAccessBehavior, CacheInvalidateBehavior, MaintenanceBehavior)
  • Giao diện quản lý log Yii2
  • Component timeline Ứng dụng
  • Component chế độ bảo trì
  • Giao diện xem thông tin hệ thống
  • WYSIWYG Text Editor: Imperavi Reactor
  • Widget Ace Editor
  • Config sẵn môi trường Test
  • Nén và nối tài nguyên (JS, CSS)
  • và nhiều chức năng nữa mà tôi lười liệt kê 😀

Các bước cài cắm:

  1. Tải source về, hiện tại đang để tại path sau:
    https://drive.google.com/a/3si.vn/file/d/0BzBKjMsydtYMQ1VkU1NwU3dtZEE/view?usp=sharing
    Chú ý đăng nhập với tài khoản 3si.vn
  2. Tạo DB:
    Name: 3si-yii2 (demo thế, sau này vào product thích đổi thành gì cũng được, miễn là sửa trong file config theo)
    Character set: utf8 -- UTF-8 Unicode
    Collation: utf8_general_ci

    Dùng PhpMyAdmin hoặc Navicat để import file DB tại đường dẫn db/3si-yii2.sql vào DB vừa tạo

  3. Chỉnh sửa config DB trong source
    Đường dẫn: common/config/base.php
    Đoạn code:

    Thay bằng config DB của các bạn.

  4. Chỉnh sửa virtual host của Apache
    Tôi dùng XAMPP trên Windows để phát triển, file cần chỉnh sửa ở đường dẫn sau: C:\xampp\apache\conf\extra\httpd-vhosts.conf
    Nội dung thêm vào:

  5. Chỉnh sửa file hosts
  6. Đường dẫn: C:\Windows\System32\drivers\etc\hosts
    Nội dung thêm vào:

  7. Chỉnh sửa file php.ini của PHP
  8. Đường dẫn: C:\xampp\php\php.ini
    Un-comment/Modify/Add (tùy vào dòng đấy có hay chưa) các dòng sau:

  9. Restart Apache

Các component:

Đăng nhập vào hệ thống từ các URL đã define trong virtual host:
Đường dẫn đến Frontend: http://3si-yii2.dev
Đường dẫn đến Backend: http://3si-yii2.dev/admin
Username/Password: admin/3si@12345

KeyStorage

Key storage dùng để lưu trữ nhiều loại thông tin khác nhau dựa trên key-value. Ví dụ như cài đặt Ứng dụng chẳng hạn. Giá trị có thể thay đổi thông qua api hoặc component CRUD trong backend.

Chế độ Bảo trì

Component này sẽ bắt tất cả các request tới, set cho nó HTTP header trả lại là (503, “Retry After”) và hiển thị 1 message bảo trì. Các tùy chọn config khác có thể tìm thấy trong class tương ứng.
3si-yii2 được cài đặt sẵn để bật chế độ bảo trì lên nếu giá trị frontend.maintenance trong KeyStorage được set thành true

Timeline

Các Widget config được trong backend

Carousel

  1. Tạo carousel trong backend.
  2. carousel

  3. Sử dụng:

DbText

  1. Tạo text block trong backend.
  2. text-block

  3. Sử dụng:

DbMenu

  1. Tạo menu trong backend.
    Untitled
  2. Sử dụng:

Các Widget khác

Grid

EnumColumn

API

3si-yii2 có module REST API được config và sẵn sàng sử dụng. Các bạn có thể truy cập nó từ link http://3si-yii2.dev/api/v1. Ví dụ GET users:
Untitled
Kết quả nhận về:

MultiModel

common\base\MultiModel – class phục vụ cho việc xử lý nhiều model trong 1 tại controller:

Tại view:

Gen code với Gii

Các bạn đã quen gen code với Gii? Đừng lo, nó ở đây:

Post Views: 548

Comments

comments