聲明:本人 PHPer 菜鳥一枚,Zend Framework 2 框架的菜菜鳥,剛學習 ZF2 不過 2 天。因爲英語實在太破,因此一開始只能找網上 ZF2 中文教程,但不少教程都只說到 ZF2 安裝與配置就結束了,沒有了下文。看來只能硬着頭皮拿着字典一點點去看官方教程了,如下是我作的一些學習塗鴉,學習過程仍是按照官方教程的順序。才疏學淺,望大俠多多指教......謝謝。
--------------------------------------------------------------------------------------------------- php
說明: mysql
(1)ZF2 並不向下兼容 ZF1。因此 ZF1 開發的項目沒法在 ZF2 中運行。 git
(2)我所使用的開發環境 Win7 + Xampp v.1.8.1,包含:Apache 2.4.3,PHP 5.4.7,MySQL 5.5.27 github
(3)DocumentRoot:e:\Web web
(4)e:\Web\zf2working\ 是我創建的一個學習ZF2的目錄,目的是與我其它的項目區分開 sql
(5)Zend Framework 2.2.1 shell
這個很少說了,Google 和 Baidu 一大推。 數據庫
官方的說明:http://framework.zend.com/about/
api
簡要總結: 瀏覽器
一、PHP Web 應用程序框架;
二、徹底面向對象(OOP);
三、MVC(Model-View-Controller)開發模式;
四、使用 PHP5.3+ 新功能和函數;
五、鬆耦合組件;
六、強大的類庫;
七、強大的技術支持(Zend Technologies,PHPer 們幾乎沒人不知道 Zend Technologies 吧。);
一、打開 mod_rewrite 支持
(1)打開 httpd.conf 文件
(2)找到 #LoadModule rewrite_module modules/mod_rewrite.so 這一行
(3)把這行左側第一個字符(#)刪除
(4)保存修改後的 httpd.conf 文件並重啓 Apache
二、支持 .htaccess 文件
要支持 .htaccess 文件有兩種方法
下面的操做假設 ZF2 開發項目保存在 e:\Web\zf2working\ 目錄下
方法一:直接修改 httpd.conf 文件
(1)、打開 httpd.conf 文件
(2)、找到 <Directory "e:/Web/zf2working"> 段,若是沒有能夠全新手動添加
(3)、添加 AllowOverride All 或者將原有的 AllowOverride None 修改爲 AllowOverride All
(4)、保存修改後的 httpd.conf 文件並重啓 Apache
方法二:在 httpd-vhosts.conf 文件中修改
(1)打開 httpd-vhosts.conf 文件,該文件通常在「Apache安裝路徑/conf/extra/」目錄下
(2)在文件底部手動添加如下信息
<VirtualHost *:80>
DocumentRoot "E:/Web/ZF2Working/zf2-tutorial/public"
ServerName zf2-tutorial.localhost
# This should be omitted in the production environment
SetEnv APPLICATION_ENV development
<Directory "E:/Web/ZF2Working/zf2-tutorial/public">
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
以上代碼詳細說明將在後面ZF2環境配置中詳細介紹,這裏只要注意加粗部分就能夠了。
(3)保存修改後的 httpd-vhosts.conf 文件並重啓 Apache
一、版本要在 5.3.x 以上(包含 5.3.x)
因爲 ZF2 採用了 PHP5.3+ 中不少的特性和函數,例如:namespaces, late static binding, lambda functions and closures 因此要求 PHP 版本必須爲 5.3 以上(含 5.3)
二、打開 openssl 支持(可選)
這個要說一下,在接下來的安裝過程當中會介紹兩種安裝方式:(1)在線安裝;(2)手動安裝,若是採用「在線安裝」那麼 openssl 須要打開,否則安裝會失敗,若是是「手動安裝」openssl 開不開就無所謂了。
(1)打開 php.ini 文件
(2)找到 ;extension=php_openssl.dll這一行
(3)將這行左側第一個字符(;)去掉
(4)保存修改過的 php.ini 文件並重啓 Apache
三、打開 PDO MySQL 數據庫支持(可選)
PHP默認是打開了 Sqlite 支持的,若是須要使用到 MySQL 就須要打開 PDO 的 MySQL 數據庫支持
(1)打開 php.ini 文件
(2)找到 ;extension=php_pdo_mysql.dll這一行
(3)將這行左側第一個字符(;)去掉
(4)保存修改過的 php.ini 文件並重啓 Apache
沒有特別需求,若是項目不牽涉到數據庫,MySQL 甚至能夠不裝。也能夠根據項目要求使用其它的數據庫,例如:Sqlite 等。
作完以上環境設置之後,本篇中最重要的部分來了!
ZF2 有兩種安裝方式:一種是「在線安裝」另外一種是「手動安裝」。
所謂的「在線安裝」就是使用託管在 github 上的 ZendSkeletonApplication (Skeleton在字典裏解釋爲:骨架,骨骼。因此能夠叫作「Zend應用程序骨架」或者能夠理解爲「Zend應用程序模板」)來構建咱們本身的應用程序。
(1)在瀏覽器中打開 https://github.com/zendframework/ZendSkeletonApplication
(2)點擊圖片右下角的 zip 按鈕(上圖畫紅圈的按鈕),下載 ZendSkeletonApplication,下載的文件名相似 ZendSkeletonApplication-master.zip。這就是咱們構建本身應用程序的基礎,也能夠理解成咱們應用程序的一個初始化的空白模板。
(3)將下載的壓縮包解壓,產生 ZendSkeletonApplication-master 文件夾。
(4)將 ZendSkeletonApplication-master 文件夾複製到 e:\Web\zf2working\ 目錄下,造成 e:\Web\zf2working\ZendSkeletonApplication-master\ 的結構。e:\Web\zf2working\ 是我在學習ZF2時定義的一個目錄,您能夠根據項目的要求或本身的喜愛修改目錄,但這個目錄必須能夠被 Apache 訪問到。
(5)將 ZendSkeletonApplication-master 文件夾改名爲您的項目名稱,在這裏我將 ZendSkeletonApplication-master 文件夾改名爲:zf2-tutorial,既把 e:\Web\zf2working\ZendSkeletonApplication-master\ 修改成 e:\Web\zf2working\zf2-tutorial\。最終個人目錄結構以下圖所示
有關虛擬主機的設置見下一個小節
(6)在 zf2-tutorial 目錄下有一個文件叫 composer.phar 這就是在線安裝的主要執行文件。打開dos窗口,切換到 zf2-tutorial 目錄執行 php composer.phar self-update 命令,執行結果以下圖
注意:因爲要使用到 PHP 的命令行,因此要將 php.exe 文件路徑添加到系統的 PATH 裏面,否則會報找不到 php.exe 錯誤
(7)當命令執行完成後接下來就是在線安裝 ZF2 了,在 zf2-tutorial 目錄下執行 php composer.phar install 命令,執行結果以下圖
上圖中有關「git」和"hg"報錯的信息沒有什麼關係,不會影響到 ZF2 的安裝。
至此 ZF2 的「在線安裝」所有結束。下面有幾點作一個說明
(1)「在線安裝」過程所花時間的長短取決於您當地的網絡狀況;
(2)ZendSkeletonApplication、composer 和 Zend Framework 2 這三者之間是什麼關係?ZendSkeletonApplication 是 Zend 應用程序骨架(或者是 Zend 應用程序模板),ZendSkeletonApplication 經過 composer 來解決依賴性的問題,而 ZendSkeletonApplication 所依賴的是 Zend Framework 2。
(3)php composer.phar self-update 這個命令幹了什麼?該命令主要是檢測 ZendSkeletonApplication 最新依賴性的檢測和升級
(4)php composer.phar install 這個命令幹了什麼?該命令裝了 Zend Framework 2。這個命令在項目目錄下的 vendor 目錄下安裝了ZF2的庫文件和一些輔助文件,同時在項目目錄下添加了一個 composer.lock 文件。
(5)php composer.phar install 報錯 「The process timed out.」怎麼辦?若是你獲得如下結果
[RuntimeException] The process timed out.
說明您的網速不給力,須要用如下命令
COMPOSER_PROCESS_TIMEOUT=5000 php composer.phar install
「手動安裝」和「在線安裝」只是在最後一步不一樣,「手動安裝」的最後一步不是用命令行方式下載 ZF2,而是須要你手動將ZF2庫添加到 ZendSkeletonApplication 目錄中。
「手動安裝」的前5步同「在線安裝」的前5步
(6)下載ZF2,瀏覽器打開http://framework.zend.com/downloads/latest 選擇 Zend Framework 2.2.1 Minimal
(7)解壓 ZendFramework-minimal-2.2.1.zip 文件到項目目錄裏的 vendor 子目錄下的 ZF2 子目錄下。
至此 ZF2 的「手動安裝」所有結束。
這個虛擬主機是否須要配置看我的開發的習慣,通常來講有個虛擬主機相對來講開發比較方便。官方教程上是創建了一個 zf2-tutorial.localhost 的虛擬主機,那咱們也設定一個虛擬主機。
因爲 ZF2 框架有一個惟一入口的腳原本接受外網的訪問請求,既 public/index.php。在個人例子中就是:e:\Web\zf2working\zf2-tutorial\public\index.php,因此我要將 e:\Web\zf2working\zf2-tutorial\public\ 做爲虛擬主機的目錄
(1)打開 httpd-vhosts.conf 文件,該文件通常在「Apache安裝路徑/conf/extra/」目錄下
(2)在文件底部添加如下代碼
<VirtualHost *:80> DocumentRoot "E:/Web/zf2Working/zf2-tutorial/public" ServerName zf2-tutorial.localhost # This should be omitted in the production environment SetEnv APPLICATION_ENV development <Directory "E:/Web/ZF2Working/zf2-tutorial/public"> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
(3)保存 httpd-vhosts.conf 文件
(4)打開 hosts 文件,該文件路徑:C:\Windows\System32\drivers\etc
添加如下代碼至文件底部
127.0.0.1 zf2-tutorial.localhost
保存並退出 hosts 文件
(5)重啓 Apache
好了,ZF2 的全部安裝和配置所有結束,看看本身的成果吧
在瀏覽器中輸入 zf2-tutorial.localhost,若是能夠看到如下頁面,恭喜你!成功了,哇哈哈哈
在瀏覽器中輸入 http://zf2-tutorial.localhost/1234 因爲 1234 這個文件不存在,若是您的 .htaccess 文件的設定是有效的話,應該能夠看到以下的顯示
若是您看到的是相似下圖顯示的標準 Apache 404 錯誤。
那麼您在繼續教程以前必須修改 .htaccess 文件。若是您使用的是 IIS + Rewrite 模式,按以下修改 .htaccess 文件
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ index.php [NC,L]
還記得上文中在設定虛擬主機時添加的代碼麼?
<VirtualHost *:80> DocumentRoot "E:/Web/zf2Working/zf2-tutorial/public" ServerName zf2-tutorial.localhost # This should be omitted in the production environment SetEnv APPLICATION_ENV development <Directory "E:/Web/ZF2Working/zf2-tutorial/public"> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
在代碼中有一行
SetEnv APPLICATION_ENV development這行說明目前咱們將整個項目的模式設定爲」開發模式(developement)「,在這個模式下 PHP 會向瀏覽器輸出全部的錯誤信息,方便咱們的開發和調試。
注意:項目正式上線以前要將這個模式刪除,以避免形成信息泄露和安全漏洞。
除了在虛擬主機的配置文件中設定開發模式以外,還須要在項目入口文件中作一點額外的設定。
打開 e:\web\zf2working\zf2-tutorial\public\index.php ,默認的代碼以下
<?php /** * This makes our life easier when dealing with paths. Everything is relative * to the application root now. */ chdir(dirname(__DIR__)); // Decline static file requests back to the PHP built-in webserver if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) { return false; } // Setup autoloading require 'init_autoloader.php'; // Run the application! Zend\Mvc\Application::init(require 'config/application.config.php')->run();在文件頂部添加如下代碼
/** * Display all errors when APPLICATION_ENV is development. */ if ($_SERVER['APPLICATION_ENV'] == 'development') { error_reporting(E_ALL); ini_set("display_errors", 1); }最終的代碼以下:
<?php /** * Display all errors when APPLICATION_ENV is development. */ if ($_SERVER['APPLICATION_ENV'] == 'development') { error_reporting(E_ALL); ini_set("display_errors", 1); } /** * This makes our life easier when dealing with paths. Everything is relative * to the application root now. */ chdir(dirname(__DIR__)); // Decline static file requests back to the PHP built-in webserver if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) { return false; } // Setup autoloading require 'init_autoloader.php'; // Run the application! Zend\Mvc\Application::init(require 'config/application.config.php')->run();
未完待續......謝謝