28 追隨者

安裝 Yii

您可以使用 Composer 套件管理器或下載封存檔兩種方式安裝 Yii。前者是較佳的方式,因為它讓您只需執行單一命令即可安裝新的擴展或更新 Yii。

Yii 的標準安裝會同時下載並安裝框架和專案範本。專案範本是一個可運作的 Yii 專案,實作了一些基本功能,例如登入、聯絡表單等。其程式碼以建議的方式組織。因此,它可以作為您專案的良好起點。

在本節和接下來的幾節中,我們將描述如何使用所謂的基本專案範本安裝 Yii,以及如何在該範本之上實作新功能。Yii 也提供了另一個名為進階專案範本的範本,它更適合在團隊開發環境中使用,以開發具有多層級的應用程式。

資訊:基本專案範本適用於開發 90% 的 Web 應用程式。它與進階專案範本的主要區別在於它們的程式碼組織方式。如果您是 Yii 的新手,我們強烈建議您堅持使用基本專案範本,因為它既簡單又功能充足。

透過 Composer 安裝

安裝 Composer

如果您尚未安裝 Composer,您可以按照 getcomposer.org 上的說明進行安裝。在 Linux 和 Mac OS X 上,您將執行以下命令

curl -sS https://composer.dev.org.tw/installer | php
sudo mv composer.phar /usr/local/bin/composer

在 Windows 上,您將下載並執行 Composer-Setup.exe

如果您遇到任何問題,請參閱 Composer 文件中的疑難排解章節。如果您是 Composer 的新手,我們也建議您至少閱讀 Composer 文件的 基本使用章節

在本指南中,所有 composer 命令都假設您已全域安裝 composer,以便它可以作為 composer 命令使用。如果您改為在本機目錄中使用 composer.phar,則必須相應地調整範例命令。

如果您之前已安裝 Composer,請確保您使用的是最新版本。您可以執行 composer self-update 來更新 Composer。

注意:在安裝 Yii 期間,Composer 需要從 Github API 請求大量資訊。請求數量取決於您的應用程式擁有的依賴項數量,並且可能大於 Github API 速率限制。如果您達到此限制,Composer 可能會要求您提供 Github 登入憑證以取得 Github API 存取權杖。在快速連線上,您可能會比 Composer 可以處理的速度更快達到此限制,因此我們建議在安裝 Yii 之前設定存取權杖。請參閱 關於 Github API 權杖的 Composer 文件,以取得有關如何執行此操作的說明。

安裝 Yii

安裝 Composer 後,您可以透過在 Web 可存取資料夾下執行以下命令來安裝 Yii 應用程式範本

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

這會將最新穩定版本的 Yii 應用程式範本安裝在名為 basic 的目錄中。如果您願意,可以選擇不同的目錄名稱。

資訊:如果 composer create-project 命令失敗,您也可以參閱 Composer 文件中的疑難排解章節,以了解常見錯誤。當您修復錯誤後,您可以透過在 basic 目錄中執行 composer update 來恢復中止的安裝。

提示:如果您想安裝 Yii 的最新開發版本,您可以改用以下命令,該命令會新增穩定性選項

composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic

請注意,Yii 的開發版本不應使用於生產環境,因為它可能會破壞您的執行程式碼。

從封存檔安裝

從封存檔安裝 Yii 包含三個步驟

  1. yiiframework.com 下載封存檔。
  2. 將下載的檔案解壓縮到 Web 可存取資料夾。
  3. 修改 config/web.php 檔案,為 cookieValidationKey 設定項目輸入密鑰 (如果您使用 Composer 安裝 Yii,則會自動完成此操作)

    // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
    'cookieValidationKey' => 'enter your secret key here',
    

其他安裝選項

上述安裝說明示範如何安裝 Yii,這也會建立一個可立即使用的基本 Web 應用程式。此方法對於大多數專案 (無論大小) 來說都是一個好的起點。如果您剛開始學習 Yii,則尤其適用。

但還有其他安裝選項可用

  • 如果您只想安裝核心框架,並想從頭開始建構整個應用程式,您可以按照從頭開始建構應用程式中說明的指示進行操作。
  • 如果您想從更複雜的應用程式開始,更適合團隊開發環境,您可以考慮安裝進階專案範本

安裝資源

Yii 依賴 Bower 和/或 NPM 套件來安裝資源 (CSS 和 JavaScript) 程式庫。它使用 Composer 來取得這些程式庫,允許 PHP 和 CSS/JavaScript 套件版本同時解析。這可以透過使用 asset-packagist.orgcomposer asset plugin 來實現。請參閱資源文件以取得更多詳細資訊。

您可能想要透過原生 Bower/NPM 客戶端管理您的資源、使用 CDN 或完全避免資源安裝。為了防止透過 Composer 安裝資源,請將以下行新增至您的 'composer.json'

"replace": {
    "bower-asset/jquery": ">=1.11.0",
    "bower-asset/inputmask": ">=3.2.0",
    "bower-asset/punycode": ">=1.3.0",
    "bower-asset/yii2-pjax": ">=2.0.0"
},

注意:如果您繞過透過 Composer 安裝資源,您有責任安裝資源並解決版本衝突。請為來自不同擴展的資源檔案之間可能的不一致做好準備。

驗證安裝

安裝完成後,設定您的 Web 伺服器 (請參閱下一節) 或使用內建 PHP Web 伺服器,方法是在專案根目錄中執行以下主控台命令

php yii serve

注意:預設情況下,HTTP 伺服器將監聽 8080 端口。但是,如果該端口已被使用,或者您希望以這種方式服務多個應用程式,您可能需要指定要使用的端口。只需新增 --port 引數

php yii serve --port=8888

您可以使用瀏覽器透過以下 URL 存取已安裝的 Yii 應用程式

http://127.0.0.1:8080/

Successful Installation of Yii

您應該在瀏覽器中看到上面的「恭喜!」頁面。如果沒有,請檢查您的 PHP 安裝是否符合 Yii 的需求。您可以使用以下方法之一檢查是否符合最低需求

  • /requirements.php 複製到 /web/requirements.php,然後使用瀏覽器透過 https://127.0.0.1/requirements.php 存取它
  • 執行以下命令

    cd basic
    php requirements.php
    

您應該設定您的 PHP 安裝,使其符合 Yii 的最低需求。最重要的是,您應該擁有 PHP 5.4 或以上版本。理想情況下是最新版本的 PHP 7。如果您的應用程式需要資料庫,您還應該安裝 PDO PHP 擴展和相應的資料庫驅動程式 (例如 MySQL 資料庫的 pdo_mysql)。

設定 Web 伺服器

資訊:如果您只是測試 Yii 而無意將其部署到生產伺服器,您可以暫時跳過此小節。

根據上述說明安裝的應用程式應可在 Apache HTTP 伺服器Nginx HTTP 伺服器上,在執行 PHP 5.4 或更高版本的 Windows、Mac OS X 或 Linux 上開箱即用。Yii 2.0 也與 facebook 的 HHVM 相容。但是,在某些邊緣情況下,HHVM 的行為與原生 PHP 不同,因此在使用 HHVM 時,您必須格外小心。

在生產伺服器上,您可能需要設定您的 Web 伺服器,以便可以透過 URL https://www.example.com/index.php 而不是 https://www.example.com/basic/web/index.php 存取應用程式。此類設定需要將您的 Web 伺服器的文件根目錄指向 basic/web 資料夾。您可能還希望從 URL 中隱藏 index.php,如路由和 URL 建立章節中所述。在本小節中,您將學習如何設定您的 Apache 或 Nginx 伺服器以實現這些目標。

資訊:透過將 basic/web 設定為文件根目錄,您還可以防止終端使用者存取儲存在 basic/web 的同層目錄中的私人應用程式程式碼和敏感資料檔案。拒絕存取這些其他資料夾是一種安全性改進。

資訊:如果您的應用程式將在您無權修改其 Web 伺服器設定的共享主機環境中執行,您仍然可以調整應用程式的結構以提高安全性。請參閱共享主機環境章節以取得更多詳細資訊。

資訊:如果您的 Yii 應用程式在反向代理伺服器後面執行,您可能需要在請求元件中設定受信任的代理伺服器和標頭

在 Apache 的 httpd.conf 檔案或虛擬主機設定中使用以下設定。請注意,您應該將 path/to/basic/web 替換為 basic/web 的實際路徑。

# Set document root to be "basic/web"
DocumentRoot "path/to/basic/web"

<Directory "path/to/basic/web">
    # use mod_rewrite for pretty URL support
    RewriteEngine on
    
    # if $showScriptName is false in UrlManager, do not allow accessing URLs with script name
    RewriteRule ^index.php/ - [L,R=404]
    
    # If a directory or a file exists, use the request directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Otherwise forward the request to index.php
    RewriteRule . index.php

    # ...other settings...
</Directory>

若要使用 Nginx,您應該將 PHP 安裝為 FPM SAPI。您可以使用以下 Nginx 設定,將 path/to/basic/web 替換為 basic/web 的實際路徑,並將 mysite.test 替換為要服務的實際主機名稱。

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name mysite.test;
    root        /path/to/basic/web;
    index       index.php;

    access_log  /path/to/basic/log/access.log;
    error_log   /path/to/basic/log/error.log;

    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # uncomment to avoid processing of calls to non-existing static files by Yii
    #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    #    try_files $uri =404;
    #}
    #error_page 404 /404.html;

    # deny accessing php files for the /assets directory
    location ~ ^/assets/.*\.php$ {
        deny all;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        try_files $uri =404;
    }

    location ~* /\. {
        deny all;
    }
}

使用此設定時,您還應該在 php.ini 檔案中設定 cgi.fix_pathinfo=0,以避免許多不必要的系統 stat() 呼叫。

另請注意,當執行 HTTPS 伺服器時,您需要新增 fastcgi_param HTTPS on;,以便 Yii 可以正確偵測連線是否安全。

您可以使用 NGINX Unit 和 PHP 語言模組執行基於 Yii 的應用程式。以下是一個範例設定。

{
    "listeners": {
        "*:80": {
            "pass": "routes/yii"
        }
    },

    "routes": {
        "yii": [
            {
                "match": {
                    "uri": [
                        "!/assets/*",
                        "*.php",
                        "*.php/*"
                    ]
                },

                "action": {
                    "pass": "applications/yii/direct"
                }
            },
            {
                "action": {
                    "share": "/path/to/app/web/",
                    "fallback": {
                        "pass": "applications/yii/index"
                    }
                }
            }
        ]
    },

    "applications": {
        "yii": {
            "type": "php",
            "user": "www-data",
            "targets": {
                "direct": {
                    "root": "/path/to/app/web/"
                },

                "index": {
                    "root": "/path/to/app/web/",
                    "script": "index.php"
                }
            }
        }
    }
}

您也可以設定您的 PHP 環境,或在同一設定中提供自訂 php.ini

IIS 設定

建議將應用程式託管在虛擬主機 (網站) 中,其中文件根目錄指向 path/to/app/web 資料夾,並且該網站已設定為執行 PHP。在該 web 資料夾中,您必須放置一個名為 web.config 的檔案,即 path/to/app/web/web.config。檔案內容應如下所示

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
  <rewrite>
    <rules>
      <rule name="Hide Yii Index" stopProcessing="true">
        <match url="." ignoreCase="false" />
        <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" 
              ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" 
              ignoreCase="false" negate="true" />
        </conditions>
        <action type="Rewrite" url="index.php" appendQueryString="true" />
      </rule> 
    </rules>
  </rewrite>
</system.webServer>
</configuration>

此外,以下 Microsoft 官方資源清單可能有助於在 IIS 上設定 PHP

  1. 如何設定您的第一個 IIS 網站
  2. 在 IIS 上設定 PHP 網站

發現錯字或您認為此頁面需要改進?
在 github 上編輯它 !