composer下載Laravel 5.4(因爲PHP版本僅7.0,故未下載5.6)php
composer create-project laravel/laravel your-project-name --prefer-dist "5.4.*"css
composer下載後已經生成APP_KEY,若是須要改變 使用命令 php artisan key:generate ,須要把php命令設置爲全局前端
下面咱們說說根文件夾下的幾個文件和文件夾(storage
和 bootstrap/cache
目錄應該容許寫入)mysql
app
文件夾 包含了應用的核心代碼,此外你爲應用編寫的代碼絕大多數也會放到這裏(詳情能夠看官網);laravel
bootstrap
文件夾包含了少量文件,用於框架的啓動和自動載入配置,還有一個 cache
文件夾用於包含框架爲提高性能所生成的文件,如路由和服務緩存文件;git
config
文件夾包含了應用全部的配置文件,建議通讀一遍這些配置文件以便熟悉全部配置項;web
database
文件夾包含了數據遷移及填充文件,若是你喜歡的話還能夠將其做爲 SQLite 數據庫存放文件夾;sql
public
文件夾包含了入口文件 index.php
和前端資源文件(圖片、JavaScript、CSS等);數據庫
resources
文件夾包含了視圖文件及原生資源文件(LESS、SASS、CoffeeScript),以及本地化語言文件;json
routes
文件夾包含了應用的全部路由定義。Laravel默認提供了三個路由文件:web.php
、api.php
和console.php
。
web.php
文件包含的路由都會應用web中間件組,具有Session、CSRF防禦以及Cookie加密功能,若是應用無需提供無狀態的、RESTful風格的API,全部路由都會定義在web.php
文件。
api.php
文件包含的路由應用了api
中間件組,具有頻率限制功能,這些路由是無狀態的,因此請求經過這些路由進入應用須要經過token進行認證而且不能訪問Session狀態。
console.php
文件用於定義全部基於閉包的控制檯命令,每一個閉包都被綁定到一個控制檯命令而且容許與命令行IO方法進行交互,儘管這個文件並不定義HTTP路由,可是它定義了基於控制檯的應用入口(路由)。
storage
文件夾包含了編譯過的Blade模板、基於文件的session、文件緩存,以及其它由框架生成的文件,該文件夾被細分爲成app
、framework
和logs
子文件夾,app
文件夾用於存放應用要使用的文件,framework
文件夾用於存放框架生成的文件和緩存,最後,logs
文件夾包含應用的日誌文件;
storage/app/public
文件夾用於存儲用戶生成的文件,好比能夠被公開訪問的用戶頭像,要達到被訪問的目的,你還須要在public
文件夾下生成一個軟鏈接 storage
指向這個文件夾。你能夠經過 php artisan storage:link
命令生成這個軟連接。
tests
文件夾包含自動化測試,其中已經提供了一個開箱即用的PHPUnit示例;每個測試類都要以 Test
開頭,你能夠經過 phpunit
或 php vendor/bin/phpunit
命令來運行測試。
vendor文件夾包含全部Composer依賴,這個文件咱們不要動,也不要修改裏面的代碼。
.env文件(如沒有,請複製一份.env.example更名爲.env)
上面說的app_key就在.env文件中,.env文件就是Laravel的配置文件,一看便懂, 同時和config文件夾下的database一塊兒配合使用
APP_ENV=local APP_KEY=base64:Wt1CEnZTaB7kq82syINzBqHcNCXxXL7uY1KMEmW/23I= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET=
.gitignore 文件 用於設置git的忽略文件
artisan 文件 中的代碼跟public/index.php的代碼基本同樣,猜想應該是經過artisan命令來運行程序,作一些自動操做,好比數據庫遷移等。
composer 文件 與package.json 不必說,你們都知道
phpunit.xml 文件 單元測試的配置文件
最後說下server.php文件。
這是根目錄下的惟一.php文件,代碼以下
$uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ); // This file allows us to emulate Apache's "mod_rewrite" functionality from the // built-in PHP web server. This provides a convenient way to test a Laravel // application without having installed a "real" web server software here. if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { return false; } require_once __DIR__.'/public/index.php';
註釋翻譯:該文件容許咱們從內置的PHP網頁服務器模擬Apache的「mod_rewrite」功能。 這提供了一種方便的方式,而沒必要在此安裝一個「真正」的網絡服務器軟件來測試Laravel應用程序。
其實這個文件模擬了web server的rewrite
功能,如Apache
的mod_rewrite
模塊,以及Nginx
的配置:
好比咱們在web server(本文使用Apache)中設置以下:
<VirtualHost *:80> DocumentRoot "F:/workspace" ServerName server.laravel.com </VirtualHost> <VirtualHost *:80> DocumentRoot "F:/workspace/laravel_study/public" ServerName self.laravel.com </VirtualHost>
此時 http://server.laravel.com/laravel_study/server.php 和 http://self.laravel.com 訪問的都是 public下的index.php,就是說我能夠經過訪問server.php來訪問個人項目,同時若是有須要的話,能夠在裏面對路徑URL等作一些處理,固然了server.php這個文件自己就不常使用,此處僅作了解。
最後順道說下laravel中的.htaccess文件
RewriteCond就像咱們程序中的if語句同樣,表示若是符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能,爲了方便理解,下面來看看幾個例子
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^Mozilla//5/.0.* RewriteRule index.php index.m.php RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule index.php index.L.php RewriteRule index.php index.b.php
上面語句的做用是當你是用FF瀏覽器訪問index.php這個文件的時候,會自動讓你訪問到index.m.php這個文件,當你是用一些移動終端訪問的 時候,會讓你對index.php這個文件的訪問實際訪問的是index.L.php去,若是你是用其它的瀏覽器訪問的時候,會讓你跳到 index.b.php。在說形象一點,上面的語句就等同於程序裏面的下面語句(依PHP語句爲例):
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0') { //跳轉到對index.m.php的訪問 } else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') { //跳轉到對index.L.php的訪問 } else //跳轉到對index.b.php的訪問
在看例2:
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php
上面語句的做用是若是你訪問的上一個頁面的主機地址是www.test.cn,則不管你當前訪問的是哪一個頁面,都會跳轉到對test.php的訪問。
在看例三:
RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule (.*)$ test.php
上面語句的做用是若是你的地址是host1或host2或host3的時候,則就跳到對test.php。從這裏能夠看出,RewriteCond語句之間默認的是AND,若是想要OR,則要明確的寫出來。
下面是一些經常使用用的重寫規則: RewriteCond %{REQUEST_FILENAME} !-f //若是文件存在,就直接訪問文件,不進行下面的RewriteRule.(不是文件或文件不存在就執行重寫) RewriteCond %{REQUEST_FILENAME} !-d //#若是目錄存在就直接訪問目錄不進行RewriteRule RewriteCond %{REQUEST_URI} !^.*(/.css|/.js|/.gif|/.png|/.jpg|/.jpeg)$ //#若是是這些後綴的文件,就直接訪問文件,不進行Rewrite