## 全新安裝,然后遷移
推薦的升級方式是建立一個全新的 Laravel 5.0 項目,然后復制您在 4.2 的文件到此新的應用程序,這將包含控制器、路由、Eloquent 模型、Artisan 命令(Asset)、資源和關于此應用程序的其他特定文件。
最開始,安裝新的 Laravel 5 應用程序到新的本地目錄下,我們將詳細探討遷移各部分的過程。
## Composer 依賴與組件
別忘了將任何附加于 Composer 的依賴組件加入 5.0 應用程序內,包含第三方代碼(例如 SDKs)。
部分組件也許不兼容剛發布的 Laravel 5 版本,請向組件管理者確認該組件支持 Laravel 5 的版本,當您在 Composer 內加入任何組件,請執行 `composer update`。
## 命名空間
默認情況下,Laravel 4 沒有在應用程序的源碼中使用命名空間,所以,舉例來說,所有的 Eloquent 模型和控制器僅存在「全局」的命名空間下,為了更快速的遷移,Laravel 5 也允許您可以將這些類別一樣保留在「全局」的命名空間。
## 設置文件
#### 遷移環境變量
復制新的 `.env.example` 文件到 `.env`,在 5.0 這相當于原本的 `.env.php`。像是您的 `APP_ENV` 和 `APP_KEY` (您的加密鑰匙)、數據庫認證和您的緩存驅動與 `session` 驅動。
此外,復制原先自定義的 `.env.php` 文件,并修改為 `.env` (本機環境的真實設置值) 和 `.env.example` (給其他團隊成員的示例)。
更多關于環境設置值,請見完整文檔。
> 注意: 在部署 Laravel 5 應用程序之前,您需要在正式主機上放置 .env 文件并設置適當的值。
#### 設置文件
Laravel 5.0 不再使用 `app/config/{environmentName}/` 目錄結構來提供對應該環境的設置文件,取而代之的是,將環境對應的設置值復制到 `.env`,然后在設置文件使用 `env('key', 'default value')` 來訪問,您可以在 `config/database.php` 文件內看到相關范例。
將設置文件放在 `config/` 目錄下,來表示所有環境共用的設置文件,或是在文件內使用 `env()` 來取得對應該環境的設置值。
請記住,若您在 `.env` 文件內增加 `key` 值,同時也要對應增加到 `.env.example` 文件中,這將可以幫助團隊成員修改他們的 `.env` 文件。
## 路由
復制原本的 `routes.php` 文件到 `app/Http/routes.php`。
## 控制器
下一步,請將所有的控制器復制到 `app/Http/Controllers` 目錄,既然在本指南中我們不打算遷移到完整的命名空間,請將 `app/Http/Controllers` 添加到 `composer.json` 的 `classmap`,接下來,您可以從 `app/Http/Controllers/Controller.php` 基礎抽象類中移除命名空間,并確認遷移過來的控制器要繼承這個基礎類。
在 `app/Providers/RouteServiceProvider.php` 文件中,將 `namespace` 屬性設置為 `null`。
## 路由過濾器
將過濾器綁定從原來的 `app/filters.php` 復制到 `app/Providers/RouteServiceProvider.php` 的 `boot()` 方法中,并在 `app/Providers/RouteServiceProvider.php` 加入 `use Illuminate\Support\Facades\Route;` 來繼續使用 `Route Facade`。
您不需要移動任何 Laravel 4.0 默認的過濾器,像是 `auth` 和 `csrf` 。他們已經內置,只是換作以中間件形式出現。那些在路由或控制器內有參照到舊有的過濾器 (例如 ['before' => 'auth']) 請修改參照到新的中間件 (例如 ['middleware' => 'auth'].)
Laravel 5 并沒有將過濾器移除,您一樣可以使用 `before` 和 `after` 綁定和使用您自定義的過濾器。
## 全局 CSRF
默認情況下,所有路由都會使用CSRF 保護。若想關閉他們,或是在指定在特定路由開啟,請移除 `App\Http\Kernel` 中 `middleware` 數組內的這一行:
~~~
'App\Http\Middleware\VerifyCsrfToken',
~~~
如果您想在其他地方使用它,加入這一行到 $routeMiddleware:
~~~
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
~~~
現在,您可于路由內使用 ['middleware' => 'csrf'] 即可個別添加中間件到路由/控制器。了解更多關于中間件,請見完整文檔。
## Eloquent 模型
你可以建立新的 `app/Models` 目錄來放置所有 Eloquent 模型。并且同樣的,在 `composer.json` 將此目錄添加到 `classmap` 內。
在模型內加入 `SoftDeletingTrait` 來使用 `Illuminate\Database\Eloquent\SoftDeletes`.
#### Eloquent 緩存
Eloquent 不再提供 `remember` 方法來緩存查詢。現在你需要手動使用 `Cache::remember` 方法快速緩存。了解更多關于緩存,請見完整文檔。
## 會員認證模型
要使用 Laravel 5 的會員認證系統,請遵循以下指引來升級您的 User 模型:
從 use 區塊刪除以下內容:
~~~
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
~~~
添加以下內容到 use 區塊:
~~~
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
~~~
移除 UserInterface 和 RemindableInterface 接口。
實現以下接口:
~~~
implements AuthenticatableContract, CanResetPasswordContract
~~~
在類中聲明引入以下 traits:
~~~
use Authenticatable, CanResetPassword;
~~~
如果你引入了上面的 `traits`,從 `use` 區塊和類聲明中移除 `Illuminate\Auth\Reminders\RemindableTrait` 和 `Illuminate\Auth\UserTrait`
## Cashier 的用戶需要的修改
Laravel Cashier 的 trait 和接口名稱已作修改。trait 請改用 `Laravel\Cashier\Billable` 取代 `BillableTrait`。接口請改用 `Laravel\Cashier\Contracts\Billable` 取代 `Larave\Cashier\BillableInterface` 。不需要修改任何方法。
## Artisan 命令
將所有的命令從舊的 `app/commands` 目錄移到新的 `app/Console/Commands` 目錄。接下來,把 `app/Console/Commands` 目錄添加到 `composer.json` 的 `classmap` 中。
然后,復制 Artisan 命令列表從 `start/artisan.php` 到 `app/Console/Kernel.php` 文件的 command 數組內。
## 數據庫遷移和數據填充
如果在您的數據庫內已經有 `users` 表,請移除 Laravel 5 內置的兩個遷移文件。
將所有的遷移文件從舊的 `app/database/migrations` 目錄復制到新的 `database/migrations` 。所有的數據填充文件也要從 `app/database/seeds` 復制到 `database/seeds`。
## 全局 IoC 綁定
若您在 `start/global.php` 有綁定任何 IoC,請將它們復制到 `app/Providers/AppServiceProvider.php` 內的 `register` 方法,您可能需要引入 App facade。
你可以選擇將這些綁定,依照類型拆分到不同的服務提供者中。
## 視圖
將所有的視圖從舊的 `app/views` 復制到新的 `resources/views` 目錄內。
## Blade 標簽修改
從安全的角度考慮,Laravel 5.0 會過濾所有輸出,不論您使用 `{{ }}` 或 `{{{ }}}` 標簽。您可以使用 `{!! !!}` 新的標簽來取消輸出過濾。請務必 確定 輸出內容是安全地才使用 `{!! !!}` 標簽。
不過,如果您 仍然必須 使用舊的 Blade 語法,請在 `AppServiceProvider@register` 開頭加入以下內容:
~~~
\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');
~~~
但是輕易不要這樣做,這可能使您的應用進程更加容易受到 XSS 攻擊,并且用 `{{--` 來注釋代碼將不再起作用。
## 多語言配置文件
將所有的多語言配置文件從舊的 `app/lang` 目錄復制到新的`resources/lang` 目錄。
## 公開目錄
將 4.2 版公共目錄內的資源復制到新應用程序內的public 目錄。并確認保留 5.0 版的 index.php 文件。
## 測試
將所有的測試文件從舊的 `app/tests` 復制到 `tests` 目錄。
## 各式各樣的文件
復制項目內其他各式各樣的文件,例如:`.scrutinizer.yml`, `bower.json` 以及其他類似工具的設置文件。
您可以將 Sass,Less 或 CoffeeScript 移動到任何您想放置的地方。 `resources/assets` 目錄是一個不錯的默認位置。
## 表單和 HTML 輔助函數
如果您使用表單或 HTML 輔助函數,您將會看到以下錯誤 `class 'Form' not found` 或 `class 'Html' not found` 。`Form` 類以及 `HTML` 輔助函數在 Laravel 5.0 中已經廢棄了;不過,這里有一些替代方法,比如基于社區驅動的,由 `Laravel Collective` 維護。
比如,你可以在 composer.json 文件中的 require 區塊增加 "laravelcollective/html": "~5.0"。
您也需要添加表單和 HTML 的 facades 以及服務提供者。 編輯 `config/app.php` 文件,添加此行到 'providers' 數組內:
~~~
'Collective\Html\HtmlServiceProvider',
~~~
接著,添加以下到 'aliases' 數組內:
~~~
'Form' => 'Collective\Html\FormFacade',
'Html' => 'Collective\Html\HtmlFacade',
~~~
## 緩存管理員
如果您的程序注入 `Illuminate\Cache\CacheManager` 來取得非 Facade 版本的 Laravel 緩存,請改用 `Illuminate\Contracts\Cache\Repository` 注入。
## 分頁
請將所有的 `$paginator->links()` 用 `$paginator->render()` 取代。
Replace any calls to $paginator->getFrom() and $paginator->getTo() with $paginator->firstItem() and $paginator->lastItem() respectively.
Remove the "get" prefix from calls to $paginator->getPerPage(), $paginator->getCurrentPage(), $paginator->getLastPage() and $paginator->getTotal() (e.g. $paginator->perPage()).
## Beanstalk 隊列
Laravel 5.0 使用 `"pda/pheanstalk": "~3.0"` 取代原本的 `"pda/pheanstalk": "~2.1"`。
## Remote
Remote 組件已不再使用。
## 工作區
工作區組件已不再使用。
- 前言
- 發行說明/L5新特性
- 升級向導
- 升級到 5.0.16
- 從 4.2 升級到 5.0
- 從 4.1 升級到 4.2
- 從 4.1.x 升級到 4.1.29
- 從 4.1.25 升級到 4.1.26
- 從 4.0 升級到 4.1
- 貢獻向導
- 環境配置
- 安裝
- 配置
- 基本功能
- 路由
- 基本路由
- CSRF 保護
- 方法欺騙
- 路由參數
- 命名路由
- 路由群組
- 路由模型綁定
- 拋出 404 錯誤
- 中間件
- 建立中間件
- 注冊中間件
- 可終止中間件
- 控制器
- 基礎控制器
- 控制器中間件
- 隱式控制器
- RESTful 資源控制器
- 請求
- 取得請求實例
- 取得輸入數據
- 舊輸入數據
- Cookies
- 上傳文件
- 其他的請求信息
- 響應
- 基本響應
- 重定向
- 其他響應
- 響應宏
- 系統架構
- 服務提供者
- 基本提供者例子
- 注冊提供者
- 緩載提供者
- 服務容器
- 基本用法
- 將接口綁定到實現
- 上下文綁定
- 標簽
- 實際應用
- 容器事件
- 參考:理解PHP 依賴注入|Laravel IoC容器
- Contracts
- 為什么用 Contracts
- Contract 參考
- 如何使用 Contracts
- Facades
- 實際用法
- 建立 Facades
- 模擬 Facades
- Facade 類參考
- 請求的生命周期
- 生命周期概要
- 聚焦于服務提供者
- 應用程序結構
- 根目錄
- App 目錄
- 為應用程序配置命名空間
- 系統服務
- 認證
- 用戶認證
- 取得經過認證的用戶
- 保護路由
- HTTP 基本認證
- 忘記密碼與重設
- 第三方登陸認證
- 交易
- 配置文件
- 訂購方案
- 一次性付款
- Single Charges
- 免信用卡試用
- 訂購轉換
- 訂購數量
- 取消訂購
- 恢復訂購
- 確認訂購狀態
- 處理失敗訂閱
- 處理其它 Stripe Webhooks
- 收據
- 緩存
- 配置
- 緩存用法
- 遞增與遞減
- 緩存標簽
- 緩存事件
- 數據庫緩存
- 集合
- Command Bus
- 建立命令
- 調用命令
- 命令隊列
- 命令管道
- 核心擴展
- 管理者和工廠
- 緩存
- Session
- 認證
- 基于服務容器的擴展
- Laravel Elixir
- 安裝與配置
- 使用方式
- Gulp
- Custom Tasks and Extensions
- 加密
- Envoy 任務執行器
- 安裝
- 執行任務
- 多服務器
- 并行執行
- 任務宏
- 通知
- 更新 Envoy
- 錯誤與日志
- 配置
- 錯誤處理
- HTTP 異常
- 日志
- 事件
- 基本用法
- 事件處理隊列
- 事件訂閱者
- 文件系統與云存儲
- 配置文件
- 基本用法
- 自定義文件系統
- 哈希
- 基本用法
- 輔助方法
- 數組
- 路徑
- 路由
- 字符串
- 網址(URL)
- 其他
- 本地化
- 語言文件
- 基本用法
- 復數
- 驗證
- 覆寫擴展包的語言文件
- 郵件
- 配置
- 基本用法
- 內嵌附件
- 郵件隊列
- 郵件與本地端開發
- 擴展包開發
- 視圖
- 語言
- 配置文件
- 公共資源
- 發布分類文件
- 路由
- 分頁
- 配置
- 使用
- 追加分頁鏈接
- 轉換至 JSON
- 隊列
- 設置
- 基本用法
- 隊列閉包
- 執行一個隊列監聽
- 常駐隊列處理器
- 推送隊列
- 已失敗的工作
- 會話
- 配置
- 使用 Session
- 暫存數據(Flash Data)
- 數據庫 Sessions
- Session 驅動
- 模板
- Blade 模板
- Blade 控制語法結構
- Blade 擴展
- 參考:@section與@yield 介紹
- 單元測試
- 定義并執行測試
- 測試環境
- 從測試調用路由
- 模擬 Facades
- 框架 Assertions
- 輔助方法
- 重置應用程序
- 表單驗證
- 基本用法
- 控制器驗證
- 表單請求驗證
- 使用錯誤信息
- 錯誤信息 & 視圖
- 可用驗證規則
- 條件驗證規則
- 自定義錯誤信息
- 自定義驗證規則
- 數據庫
- 使用基礎
- 配置
- 讀取/寫入連接
- 執行查找
- 數據庫事務處理
- 獲取連接
- 日志記錄
- 查詢構造器
- Selects
- Joins
- 高級 Wheres
- 聚合
- 原生表達式
- 添加
- 更新
- 刪除
- Unions
- 悲觀鎖定 (Pessimistic Locking)
- Eloquent ORM
- 基本用法
- 批量賦值
- 新增,更新,刪除
- 軟刪除
- 時間戳
- 范圍查詢
- Global Scopes
- 關聯
- 關聯查詢
- 預載入
- 新增關聯模型
- 更新上層時間戳
- 使用樞紐表
- 集合
- 獲取器和修改器
- 日期轉換器
- 屬性類型轉換
- 模型事件
- 模型觀察者
- 模型 URL 生成
- 轉換成數組 / JSON
- 結構生成器
- 建立與刪除數據表
- 加入字段
- 修改字段
- 修改字段名稱
- 移除字段
- 檢查是否存在
- 加入索引
- 外鍵
- 移除索引
- 移除時間戳記和軟刪除
- 保存引擎
- 遷移和數據填充
- 建立遷移文件
- 執行遷移
- 回滾遷移
- 數據填充
- Redis
- 配置
- 使用方式
- 管道
- 開發包
- Confide 用戶身份認證
- Entrust 權限管理
- Shoppingcart 購物車
- Genertators 代碼生成工具
- IDE Helper IDE助手
- Artisan 命令行工具
- 概覽
- 用法
- 在命令行接口以外的地方調用命令
- 定時調用 Artisan 命令
- 開發
- 建立自定義命令
- 注冊自定義命令