2015-08-17 13 views
14

Tôi đang sử dụng Yii2 và đã đọc khoảng themingtheme inheritance; Tuy nhiên có một số câu hỏi sau:Tìm hiểu cách Yii2 tìm tài nguyên chủ đề khi sử dụng các khoản hoàn trả

Hãy xem xét ví dụ sau:

'view' => [ 
    'theme' => [ 
     'pathMap' => [ 
      '@app/views' => [ 
       '@app/themes/current', 
       '@app/themes/default', 
      ], 
     ], 
     'baseUrl' => '@web/themes/current', 
     'basePath' => '@webroot/themes/current', 
    ], 
], 

Bây giờ, hãy tưởng tượng chúng tôi yêu cầu các tập tin theme foo; như tôi hiểu nó đầu tiên này sẽ được xem xét cho theo thứ tự sau:

  • @app/themes/current/foo.php
  • @app/themes/default/foo.php
  • @app/views/foo.php

Bây giờ tưởng tượng foo.php không tìm thấy trong các chủ đề @app/themes/current/, vì vậy nó sẽ sử dụng tệp được tìm thấy trong @app/themes/default/.

Bây giờ, xem xét các cài đặt baseUrlbasePath Tôi hơi bối rối về cách chúng được sử dụng trong các trường hợp này.

Bây giờ, hãy tưởng tượng foo.php tham chiếu tệp hình ảnh bên trong tệp, điều này sẽ không tìm cách @web/themes/current/images/myImage.jpg thay vì @web/themes/default/images/myImage.jpg?

Trả lời

4

Trong trường hợp này, basePath là vô giá trị. Vì basePath chỉ được áp dụng khi pathMap trống.
basePath không phải là dự phòng, Đây là lối tắt của pathMap, sử dụng nhanh khi bạn chỉ có một chủ đề.

'pathMap' => [ 
    '@app/views' => [ 
     '@app/themes/current/views', 
    ], 
], 

Tương đương với:

'basePath' => '@app/themes/current', 

(Yii hiểu rằng thư mục @app/themes/current/views tồn tại)

baseUrl: Nó được trả về khi bạn gọi $this->theme->getBaseUrl() theo quan điểm của tập tin. Ít có giá trị với nhiều chủ đề.

Giới thiệu về dự phòng cho tệp tĩnh. Dự phòng theo chủ đề không được thiết kế cho mục đích này.

+0

Cảm ơn thông tin. Tôi không cần một dự phòng * cho các tài nguyên thực sự, nhưng tốt hơn là một cách để nó lấy tài nguyên từ cùng một thư mục có thể truy cập web mà nó tìm thấy tệp xem chủ đề trong thư mục chủ đề '@ app' chủ đề. – Brett

+0

Bạn có thể tham khảo hàm 'applyTo()'. Nhưng nó hoạt động với đường dẫn tập tin: http://www.yiiframework.com/doc-2.0/yii-base-theme.html # applyTo() - detail –

+0

Sau đó, bạn sẽ không nhận được dự phòng chủ đề? – Brett

2

điểm liên kết của bạn bên trong tập tin như exmaple này từ docs:

$theme = $this->theme; 

// returns: $theme->baseUrl . '/img/logo.gif' 
$url = $theme->getUrl('img/logo.gif'); 

// returns: $theme->basePath . '/img/logo.gif' 
$file = $theme->getPath('img/logo.gif'); 

Nó sẽ nhận được tập tin từ thư mục chủ đề hiện hành.

+0

Cảm ơn, nhưng tôi đã biết cách thực hiện điều đó. Điều đó không thực sự giải thích câu hỏi của tôi là gì. – Brett

+0

Nếu foo.php được tìm thấy trong chủ đề 'default', nó sẽ xem xét $ this-> theme-> baseUrl và -> basePath thuộc về' default' theme và nó sẽ không tìm kiếm một chủ đề khác để thiết lập các giá trị cơ bản mới *. @Brett – SiZE

Các vấn đề liên quan