Các thành phần ứng dụng

Mỗi ứng dụng là hiện thực của mẫu thiết kế Service Locators. Mỗi ứng dụng sẽ chứa các thành phần được gọi là thành phần ứng dụng giúp cung cấp các dịch vụ cho các tiến trình xử lý. Chẳng hạn, thành phần urlManager đảm nhiệm chức năng cho bộ định tuyến cho các yêu cầu xử lý tới các bộ điều khiển; thành phần db cung cấp các dịch vụ để giao tiếp với cơ sở dữ liệu (CSDL); và các thành phần khác.

Mỗi thành phần ứng dụng đều có một định danh ID giúp xác định thành phần duy nhất trong cùng một ứng dụng . Bạn có thể truy cập vào các thành phần ứng dụng qua câu lệnh sau.

\Yii::$app->componentID

Ví dụ, sử dụng câu lệnh \Yii::$app->db để lấy thông tin kết nối tới CSDL, và câu lệnh \Yii::$app->cache để lấy thông tin primary cache đã đăng ký trong ứng dụng.

Mỗi thành phần ứng dụng được tạo một lần và được truy cập trong ứng dụng. Và có bất kỳ sự truy cập nào sau đó đều trả về cùng một thể hiện của thành phần đó.

Bất kỳ đối tượng nào cũng có thể là thành phần ứng dụng. Bạn có thể đăng ký chúng bằng việc thiết lập các thuộc tính yii\base\Application::components vào trong mục cấu hình ứng dụng. Ví dụ,

[
    'components' => [
        // Dung class để đăng ký thành phần "cache"
        'cache' => 'yii\caching\ApcCache',

        // Dùng mảng các tham số để đăng ký thành phần "db"
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // Dùng hàm để đăng ký thành phần "search"
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

Lưu ý: Bạn cần đăng ký các thành phần ứng dụng một cách cẩn thận. Các thành phần ứng dụng cũng như các biến có phạm vi toàn cục. Sử dụng quá nhiều các thành phần ứng dụng có thể khiến mã nguồn khó kiểm tra và bảo trì. Cách tốt nhất, bạn nên khởi tạo các thành phần ở phạm vi cục bộ và khi cần thiết có thể thêm vào ứng dụng.

Thành phần tải tự động (Bootstrapping)

Như đề cập ở trên, các thành phần ứng dụng chỉ được khởi tạo khi nó được truy cập vào lần đầu tiên. Nếu thành phần không được truy cập tại các yêu cầu xử lý, thì sẽ không được khởi tạo. Tuy vậy , thỉnh thoảng, các thành phần ứng dụng có thể được khởi tạo ở mỗi yêu cầu, thậm chí nó không được truy cập. Để làm được như vậy, bạn cần liệt kê các định danh vào trong thuộc tinh bootstrap của ứng dụng application.

Ví dụ, thông tin cấu hình sau sẽ chắc chắn rằng thành phần log luôn luôn được tải:

[
    'bootstrap' => [
        'log',
    ],
    'components' => [
        'log' => [
            // Các thiết lập cho thành phần "log"
        ],
    ],
]

Các thành phần ứng dụng chính

Yii định nghĩa danh sách các thành phần ứng dụng chính cùng với nó là các định danh và thông tin cấu hình. Ví dụ, thành phần yii\web\Application::request được dùng để lấy thông tin về các yêu cầu từ user và xác minh rồi gửi tới các bộ định tuyến (route); thành phần yii\base\Application::db có chức năng thiết lập các kết nối và thông qua đó bạn có thể thực hiện các truy vấn vào CSDL. Như vậy, các thành phần ứng dụng sẽ giúp ứng dụng Yii tiếp nhận các yêu cầu từ user.

Phần dưới là danh sách các thành phần ứng dụng chính được xác định trước. Bạn cần phải cấu hình và tùy biến chúng như những thành phần ứng dụng khác. Mỗi khi bạn cấu hình các thành phần này, nếu bạn không xác định các class, thì giá trị mặc định sẽ được dùng.

  • assetManager: quản lý các file tài nguyên (asset) được đóng gói và chia sẽ. Tham khảo thêm mục Quản lý các file tài nguyên để biết thêm chi tiết.
  • db: thực hiện kết nối CSDL và dựa vào thành phần có thể thực hiện các câu lệnh truy vấn dữ liệu. Lưu ý, khi bạn thiết lập thành phần này, bạn cần phải cung cấp các thông tin về các thuộc tính được yêu cầu , như yii\db\Connection::$dsn. Tham khảo thêm tại mục Data Access Objects để biết thêm thông tin.
  • yii\base\Application::errorHandler: nắm giữ các ngoại lệ và lỗi của PHP. Tham khảo thêm mục Bắt lỗi để biết thêm thông tin.
  • formatter: định dạng dữ liệu mỗi khi gửi tới user. Ví dụ, các số có thể được hiển thị cùng với các dấu ngăn cách phần ngàn, ngày có thể được định dạng ở dạng ngày dài. Tham khảo thêm tại mục Định dạng dữ liệu để biết thêm thông tin.
  • i18n: hỗ trợ định dạng và dịch đa ngôn ngữ. Tham khảo thêm tại mục Internationalization để biết thêm thông tin.
  • log: quản lý mục log. Tham khảo thêm tại mục Logging để biết thêm thông tin.
  • mail: hỗ trợ soạn thảo và gửi email. Tham khảo thêm tại mục Mailing để biết thêm thông tin..
  • yii\base\Application::response: represents the response being sent to end users. Tham khảo thêm tại mục Responses để biết thêm thông tin..
  • yii\base\Application::request: tiếp nhận các yêu cầu từ user. Tham khảo thêm tại mục Requests để biết thêm thông tin..
  • session: quản lý các phiên (session). Thành phần này chỉ được kích hoạt với Ứng dụng Web. Tham khảo thêm tại mục Sessions and Cookies để biết thêm thông tin..
  • urlManager: xử lý thông tin về URL. Tham khảo thêm tại mục URL Parsing and Generation để biết thêm thông tin..
  • user: giúp xác thực người dùng. Thành phần này chỉ được kích hoạt với Ứng dụng Web Tham khảo thêm tại mục Xác thực (Authentication) để biết thêm thông tin..
  • view: hỗ trợ giao diện. Tham khảo thêm tại mụcViews để biết thêm thông tin..