Laravel – 安裝 voyager 遇到 Specified key was too long

使用 Laravel 5.6.33 安裝遇到了

那麼只要在 app/Providers/AppServiceProvider.php 添加

就沒問題了!參考網友

php – Laravel 安裝與逐步教學

Composer 安裝

使用 composer 下載 installer 幫助建立 composer

測試看看是否存在,若在 CentOS 7.X 會出現錯誤:-bash: laravel: command not found

這時候我們修改你檔案

加入 laravel 所在路徑,例如我的在「/home/jason/.config/composer/vendor/bin」

安裝 laravel

可以在本機建立服務器,例如訪問 http://localhost:8000 會直接進入 blog 路徑

API

如果要直接查閱 Laravel 的 Class 內部有哪些方法,可以參考官方 API Document 查詢你要的版本非常方便。官方 Laravel 手冊並沒有列出所有可用的方法,需要自行查找。

基礎教學

Facades 表面

若喜歡使用 Laravel 靜態的代理方法,例如使用 View::share() 替代 view()->share(),那麼必須要使用命名空間 Illuminate\Support\Facades。好處是看起來簡潔、難忘,Facades 提供許多的靜態方法可以到這裡查看

Routing 路由

預設 routes/web.php 是註冊給 web 訪問的路由,這些範例可以更快理解用法。

使用 GET 請求 domain/foo:

強制或選用參數傳遞:

使用 GET 請求 domain/user 讀取 UserController 控制器的 index() 方法:

下面這些都是回覆 HTTP 的動作:

同時指定多個方法到一個路由:

任何HTTP動作都對應到一個路由:

前綴用法,例如 admin/ 底下的路由

Middleware 中介層

這是在程序進入 routing 之間的邏輯層,例如驗證 CSRF 跨站請求偽造就可以在這裡處理。

新增中介層

例如我要新增一個新的 app/Http/Middleware/CheckAge.php,然後在 handle() 寫入我要的年齡判斷年齡小於 200 回到首頁,否則通過。那麼可以使用 artisan 新增

註冊中介層

預先註冊在 app/Http/Kernel.php 看是要

  1. $middleware 全域
  2. $middlewareGroups 路由群組
  3. $routeMiddleware 特定路由時觸發

一旦註冊,就可以在路由中使用。

使用全名

使用別名

我們可以在 app/Http/Kernel.php 看到有哪些是預設註冊的中介層。

CSRF Protection 跨站請求偽造

預設已經在 app/Http/Kernel.php 的屬性 $middlewareGroups[‘web’] 中註冊了,所以會自動從 session 中驗證。若要排除的網址可以添加在 app/Http/Middleware/VerifyCsrfToken.php

在 form 添加可以使用 Blade 提供的 @csrf 指示

透過 AJAX  的方法

通常我們在前端都已經使用 AJAX 發送 CRUD 請求了,所以我們需要夾帶在 headers 表頭傳送,這樣 Laravel 在中介層會透過 VerifyCsrfToken 檢查表頭中一個叫做 X-CSRF-TOKEN 的值。我們可以這樣製作,在視圖中添加

接著指示 jQuery 取得 csrf-token 並附加到 headers

如此一來就能夠簡單的保護 CSRF 攻擊。

Controllers 控制器

新增一般控制器

路由的參數也會對應到 show() 的 $id

這邊有趣的是,如果把 show($id) 改成 show(User $user),讓路由傳遞過來的 $id 改成由 App\User 接收,Laravel 會自動幫你把使用者搜尋出來喔!可以省掉自己寫 User::find($id) 的動作。

將路由指定控制器

控制器路徑底下的控制器,命名空間要注意預設的是 App\Http\Controllers。以下範例的路由 /foo 會讀取 App\Http\Controllers\Photos\AdminController.php。

若要使用 middleware 中介層

也可以在 Controller 中的 __construct() 使用分配哪些方法可以使用,哪些方法不可已使用,例如

新增 CRUD 控制器

  • index() 顯示列表的資源
  • create() 填寫的表單頁
  • store(Request $request) 將數據儲存,也就是新增
  • show($id) 顯示特定的資源
  • edit($id) 編輯特定的資源表單
  • update(Request $request, $id) 更新已經存在的特定資源
  • destroy($id) 刪除特定資源

接著附加聰明的路由給 routes/web.php,這樣使用 API 呼叫 POST/GET/PUT/PATCH/DELETE 的時候將能自動對應。不過要注意,需要寫入的動作如 POST/PUT/DELETE 對應接收的方法,都會進行驗證 CSRF,所以測試的時候一定也要把 @CSRF 帶入表單。

HTTP 請由的動作對應到路由語控制器,會如官方提供的這張圖所示

Verb URI 意思 Action Route Name
GET /photos 顯示列表的資源 index photos.index
GET /photos/create 填寫的表單頁 create photos.create
POST /photos 將數據儲存,也就是新增 store photos.store
GET /photos/{photo} 顯示特定的資源 show photos.show
GET /photos/{photo}/edit 編輯特定的資源表單 edit photos.edit
PUT/PATCH /photos/{photo} 更新已經存在的特定資源 update photos.update
DELETE /photos/{photo} 刪除特定資源 destroy photos.destroy

Request 請求

若想從路由指定並帶入到控制器,如下例:路由 user 後方第一個參數是 id,但因為在控制器中第一個參數是依賴注入的 $request 所以會跳過,直接對應到第二個參數 $id

input 會自動修剪 / (TrimStrings) 與 轉換無文字為 null (ConvertEmptyStringsToNull),若要禁用可以到 App\Http\Kernel 移除預設,參考。如果路由也打算直接取得 request 可以這樣寫,一樣 $request 透過依賴入入的方式實現

一些可以使用的方法

表單重新填寫用法

當我們驗證失敗即將返回前一頁要求使用者重新填寫的時候,可以配合 withInput()

然後在重新填寫表單的控制器中,使用

快閃取回剛剛填寫的欄位值。

JSON

如果來源請求 header 的 Content-Type 是 application/json,如 jQuery 的 $.post,那麼可以用 . 的方式來挖掘數據

過濾

若要使用 PSR-7 Requests 的請求則需要額外安裝,參考官網

Cookies 餅乾

1. 分離使用,透過靜態方法 (個人較喜歡

2. 附加在 reponse(),透過實體化 Request

File 文件

主要是處理 $_FILE 的工具

上傳檔案

驗證檔案有效後,儲存到 storage/images/filename.png

 

Reponse 回覆

簡單用法,直接在 controllers 或 routes 中使用 return 作為回覆數據。

Redirect 重新導向

導向路徑

導向上一頁並夾帶 input 參數

例如驗證錯誤表單的時候,會把值放到一次性的備存

導向被命名的路由

導向控制器動作

導向並夾帶快閃數據

這通常用在如 “新增成功” 的訊息

導向到的視圖可以這麼處理

JSON

JSONP

File Downloads 文件下載

Streamed Downloads 下載資料流

有時候我們會需要下載 echo 的檔案

File Responses 文件回覆

可以直接在瀏覽器顯示文件而不會啟動下載,例如 PDF

Views 視圖

單張視圖的參數

也可以使用這種方法在其他區域為 view 檔定數據,例如使用 view composer 的時候(下方會介紹)。

共用視圖的參數

可以提供給所有視圖都使用這項參數。適合放置的地方在 app/Providers/AppServiceProvider.php

Blade 刀片

傳遞到試圖的參數,基本上我們可以透過 {{ $data }} 來顯示並自動過濾XSS攻擊,如果不希望過濾XSS可以使用如

其實 blade 也只是把 {{ }} 符號轉換成

{{ }} 內也可以使用純 PHP 語言如

另外邏輯與指令通常都會加入前綴 ‘@’ 來表示。基本上邏輯判斷的寫法跟 PHP 類似,所有用法就去官網看這裡不贅述。建立表單常用的:

當然 Blade 可以組合不同分割的視圖,我們快速示範這個例子

兩張視圖的部分設計如下

我們發現這兩個指令

  • @yield() – 產生:提供給 @section 產生的位置
  • @section() – 部分:實作內容模塊,這些內容會提供給 @yield() 產生

也就是說 「section() ——— 顯示到 ———> yield()」,查看網址後會看到合併後的結果

Service Inject 注入服務

如果要在 blade 內使用類別,例如我們常見要處理字串、if else 顯示不同區塊、依照各國顯示不同的日期格式等視覺。可以這麼使用

  • @inject(‘接收的變數’, ‘類別名稱’)

一些工具

要截斷文字,通常用來顯示描述可以使用

 

 

View Composer 視圖作曲家

View composers are callbacks or class methods that are called when a view is rendered. If you have data that you want to be bound to a view each time that view is rendered, a view composer can help you organize that logic into a single location.

-Laravel Document

一開始有點難以理解,其實就是說:若每次渲染該視圖時都要綁定參數,那麼我們可以把這個綁定的邏輯獨立出來。應用情況例如後台管理介面,<header> 都會顯示登入後的會員名字。這與 view::share() 的差別在於

  • view::share() 只是分享這個參數到所有 view 都可以使用
  • View Composer 指定讀取哪個視圖的時候運作自訂的邏輯

兩者可以處理共用視圖的方式類似,看你偏好如何處理囉。提供簡單快速的範例來實作 Contact 聯絡我們的介面:


  1. 建立控制器:使用 artisan 來產生 app/Http/Controllers/ContactController.php
  2. 指定路由: routes/web.php,自動對應 CRUD

    測試 http://localhost:8000/contact 應該能正確讀取方法 ContactController::index()
  3. 添加視圖
    我們先指定 ContactController.php 要載入的視圖並帶入參數

    新增 resources/views/contact/index.blade.php 並顯示參數值

  4.  建立 service provider 服務提供者 ComposerServiceProvider:
    手動添加 app/Providers/ComposerServiceProvider.php,參考

  5. 加入設定:config/app.php,讓系統運作的時候會啟用 ComposerServiceProvider

    瀏覽器重新整理就會觸發上面 boot(),所以我們要添加邏輯:當讀取視圖 contact/sendtype.blade.php 會調用 App\Http\ViewComposers\SendtypeComposer 類別

    我們會看到 View::composer() ,這還有兩種寫法可以使用
  6. 建立被調用的類別:app/Http/ViewComposers/SendtypeComposer.php,並提供視圖所需要的參數。我們透過 $view->with() 的方法來片段增加。

    這時候規則都建立好了,不過還無法看到實際效果,所以我們要建立 ComposerServiceProvider 所提到的視圖 sendtype.blade.php
  7. 建立用 View Compoer 抽離的視圖
  8. 讓視圖 index.blade.php 透過模板語言載入視圖 sendtype.blade.php
    我們修改 resources/views/contact/index.blade.php 如下,利用 blade 指令的 @include(),接著重新整理畫面就能看到包含 contact/sendtype.blade.php 與帶入參數的介面了。

也就是說透過 View Composer 可以把共用的視圖獨立出具有邏輯行為的試圖,這意味著若打算在其他視圖中使用 contact/sendtype.blade.php 並渲染數據,我們只要透過 @include(‘contact.sendtype’) 插入即可。

URL Generation 網址生成

也可以透過 url helper 直接使用

 

URLs For Named Routes 替網址命名

幫 routes 命名,可以不必耦合到實際的路由。當我們實際的路由發生改變,就不需要更動調用的路由函式。

Signed URLs 簽署網址

產生一個有時效性的網址,這會通過簽署來認證合法性。通常用在發送 E-mail 給客戶用來申請忘記密碼、或是退訂訂單確認的時候。以下範例

路由先定義好否則會報錯

接著不經過控制器直接路由示範

打開 http://localhost:8000/test 會看到一串網址,我們貼到網址去,成功的話就會出現簽章通過。

如果要在 form 表單中夾帶簽章參數,拋送到 Laravel 的時候可以透過中間層去驗證,可以簡化一些程式碼。

路由的部分,會需要透過中間層去認證簽署,我們在命名路由之後,緊接著使用 middleware()

URLs For Controller Actions 控制器操作網址

對應到控制器的路由,如果控制器使用 resource 的方式對應CRUD,那麼網址也會自動轉換,必填的路由參數字段,也會強制要帶入。

在視圖表單的時候也可以這麼使用

Session 會話

這個就不陌生了,當然建議直接使用 Laravel 提供的,因為包含了自動加密。使用如

不過我推薦使用全域函式。

新增/修改

提取

拉出並刪除

刪除

清空所有

Validation 驗證

暫時空著,太多囉

Error Handling 錯誤處理

報告紀錄而不會渲染錯誤頁面

HTTP Exceptions – HTTP 例外處理

Logging 紀錄

紀錄預設會在 storage/logs/laravel.log ,相關設定檔可以查閱 config/logging.php。有這八個級別可以用

可以記錄陣列

Encryption 加密

生成隨機的鑰匙,添加到 config/app.php 的選用參數 key

Hash 哈希

單向雜湊,適合用在儲存密碼

Database 資料庫連接

config/database.php 設定如 mysql 的帳號密碼,預設使用 Laravel Homestead,但是我們不用所已把參數替換成如

Query Builder 查詢產生器

幾乎能處理絕大多數的 SQL 語句。ORM 的內部也是使用 Query Builder,我們可以快速透過熟悉的SQL語言直接做溝通。

如果需要關聯查詢

其他詳細的看 官方介紹

Eloquent ORM 付於表現的物件關聯對映

內部的基礎指令是透過 Query Build,我們這裡介紹 ORM 操作。Laravel 模型類別名稱使用單數。以下示範,我們先透過 artisan 建立

開啟 app/Product.php,預設會有以下事情,若要修改預設可以參考官方

  1. 對應複數資料表名稱,並使用下滑線連接單字
  2. 主鍵預設 id 且為整數,會自動遞增
  3. 時間戳記預設啟用 Y-m-d H:i:s,所以資料表須要 created_at 與 updated_at 欄位
  4. 資料庫連接使用設定檔,如果要連到額外的資料庫則須修改

這樣就建立完畢了,幾乎不用寫什麼程式碼,我們就可以在任何地方調用 CRUD 的相關操作囉

ORM/Query Build 在預設情況下,幫我們處理了 SQL Injection 攻擊。常用的 CRUD 指令都非常多,建議到官網去看。以下介紹基本

新增

查詢

我們常常需要找不到資料來可以獲取 Exception 列外來顯示找不到頁面,可以這樣用

修改

實際刪除

這個刪除會真的從資料表中刪除。

如果僅希望虛擬的刪除 (Soft Delete 軟刪除) 那要使用下方介紹

軟刪除

並不是真的刪除數據,而是透過改變欄位 deleted_at 來判斷刪除。所以資料表一定要有這個欄位,Model 也須要添加 trait,例如

同時實際刪除的方法,但從資料表中會看到欄位 deleted_at 出現了時間戳記。

當我們從 Laravel 的模型中取出資料表資料,這筆資料就不會存在了,當然也包含任何的計算數量與查詢。

使用原始文字

有時候我們會用到原生的資料庫方法,這時候就搭配使用 DB::raw(),可以免去自動加引號。例如

自訂類別

因為使用 psr-4 標準,我們在 composer.json 可以看到已經定義在 app/ 底下

所以我們自訂的類別可以放在 app/ 底下的任何地方,只要符合命名空間與路境的對應就好。有了 psr-4 會很方便,因為我們從命名空間就能知道類別視放置在哪裡。例如我有個購物車類別

控制器或路由就直接使用即可

Pagination 分頁

主要有兩個方法

  • paginate() 包含計算所有數量與各個分頁
  • simplePaginate() 只有上下頁,所以無法取得總數量與每個分頁

分頁的 HTML 結構與 CSS 樣式,會與 Bootstrap 前端元件函視庫 (front-end component library) 相符合,例如控制器或路由中指定需要每頁 5 筆

視圖

追加 Query String

添加錨點

手動製作

通常我們會配合 Model 自動分頁,但有時我們希望自己切割陣列或物件來製作。參考使用 Illuminate\Pagination\LengthAwarePaginator,實例化(參考)要夾帶參數如

  • items (mixed) 頁分頁的項目如陣列 (或物件)
  • total (int) 總數量
  • perPage (int) 每頁多少筆
  • currentPage (int|null) 當前頁數
  • options (array)
    • path,可以用 $request->url()
    • query,可以用 $request->query()
    • fragment
    • pageName

返回 JSON

當透過使用者端請求 JSON 格式,那會自動返回 total, current_page, last_page 的分頁參數,以及 data 的實際結果。

自訂分頁視圖

因為預設使用 Bootstrap 套件,如果我們不使用它而打算自定義視圖的話,可以寫

當然我們可以透過 artisan 產生並從中修改已經定義好的視圖,會更方便

會在 resources/views/vendor/pagination/ 看到預設的視圖模板。

指定預設分頁視圖

如果不使用 Bootstrap 但要套用到整個系統的預設值,可以在 blog/app/Providers/AppServiceProvider.php 設定

例如 pagination::semantic-ui 代表位於 resources/views/vendor/pagination/semantic-ui.blade.php

其他操作方法

TESTING 測試

  • 定義在 phpunit.xml。
  • 可以增加 .env.testing 環境設定,當使用 artisan 添加選用參數 env=testing 可以覆蓋掉 .env 的設定。
  • 路徑 tests 看到兩個路徑
    • Feature:測試較大型的程式碼,通常是不同對象的交互運用,甚至是 HTTP 請求。
    • Unit:專注於測試較小的程式碼,通常是單一 method。

看 tests/Unit/ExampleTest.php 這個方法 assertTrue() 是用來斷言為真

接著我們下指令測試,官方是說用 phpunit ,不過在 windows 要這麼使用

Linux 下使用

(如果要看到概要可以這麼用)

接著我們可以看到測試結果

如果我們修改成 $this->assertTrue(false); 因為會是錯誤的結果,那麼會得到這樣

各種斷言的方法,可以在 PHPUnit 文件中找到

Database Migrations 資料庫喬遷

 

Authentication 認證

使用 artisan 在 app/Http/Controllers/Auth 自動建立註冊、登入、重設密碼、忘記密碼四個控制器。

接著要建立資料表 users,但因為路徑 database/migrations 已經預設了喬遷資料庫的紀錄,我們只需要啟用來建立預設的使用者資料表。

如果下了指令後看到報錯

那麼只要在 app/Providers/AppServiceProvider.php 加入

然後去資料庫把 migrations, users 資料表刪除,重新下 artisan 指令即可。成功建立後,前台頁面就可以嘗試註冊使用者並登入。

重新導向

認證成功會自動導向 /home 若要修改,可以修改控制器的屬性如

這個屬性可以在 LoginController.php, RegisterController.php, ResetPasswordController.php 中找到。另外還要到 app/Http/Middleware/RedirectIfAuthenticated.php 修改如

自訂使用者儲存資料

修改 form 表單後,在 app/Http/Controllers/Auth/RegisterController.php 有兩個方法

  • validator()
    • 可以自行添加要驗證的
  • create()
    • 這是使用 Eloquent ORM 新增,可自行添加要寫入的

取得認證成功的使用者資料

通過認證,不管在哪裡我們都可以用簡單的方法來取得

當然也可以在控制器中使用 Request

確定當前用戶是否認證

通常這會在 Middleware 中介層做好認證後才訪問某些控制器。

訪問需要使用者認證

可以在路由使用

或是在控制器添加

重新導向未經授權的用戶

當 auth 中介層偵測到未經授權的用戶,將返回 JSON 401,或者如果不是 AJAX 請求,將重新導向用戶到登陸名為 route。app/Exceptions/Handler.php 添加

指定一名警衛

將中間層 auth 附加到路由時,還可以指定要使用哪個警衛來驗證用戶。
指定的 guard 應該對應到 auth.php 配置文件中 guard 的鍵

登入限制

LoginController 預設多次登入失敗,將會暫停登入1分鐘。定義在 Illuminate\Foundation\Auth\ThrottlesLogins.php。

手動登入

密碼我們不用 Hash 後到資料表中比對,因為 Laravel 會幫我們處理好。

如果要附加一些條件,可以這麼寫

訪問特定的 Guard 警衛實例

下面例子,對應到 config/auth.php 中的陣列 guards。

登出

記住使用者

登入後,通常我們會記住使用者,那麼就給予第二個參數布林值 true

我們可以透過這樣來確認已經被記住了

將取得的使用者登入

若我們透過 Model 取得使用者,打算將他登入

也可以使用 guard 警衛

也可以直接使用主鍵

若要單次請求被記住,不會使用 session, cookie

Authorization 授權

通常混和 Gates 與 Policies 兩個方法,可以想像是 Routes 與 Controllers 的角色。通常決定要使用 Gates 或是 Policies 可以這樣想:

  • Gates 適用在無任何模型或資源,例如查看儀錶版。
  • Policies 適用在想要為特定模型或資源做授權。

Gates 大門

Gates 寫在 App\Providers\AuthServiceProvider:

或是使用 Class@method 樣式,那麼會自動對應到 Policies (下個段落介紹)

當然也可以使用 resource 方法,如同在 Routes 路由自動定義 Controllers 一樣

如果要複寫功能的話,可以透過第三個參數,鍵代表功能,值代表方法

上面代表的意思就是

  • post.image 對應 App\Policies\PostPolicy@updateImage
  • post.photo 對應 App\Policies\PostPolicy@updatePhoto

Authorizing Actions 授權行為

授權行為必須透過 Gate,要注意這個範例因為在 defined() 有使用 $user,但在此處我們不需要傳入使用者到這個方法,Laravel 會自動帶入到 Gate 的閉包。

不過如果想要明確指定哪個使用者的話,可以這麼寫

範例,當身分不是 super 的時候不能訪問儀錶版:

 

Intercepting Gate Checks 攔截門檢查

(待補上)

Creating Policies 建立政策

有了 Gate 以後我們要產生政策,Policies 政策是一個包圍在特定的 Model 或是資源之外的類別,例如我們有 Blog 應用程式,會有 PostModel 發佈模型,那麼就有一個相對應的 PostPolicy 發佈政策,用來授權使用者新增或修改發佈。

透過 artisan 建立,可以選擇是否使用 model 來自動產生 CRUD 政策的方法

Registering Policies 註冊政策

一旦政策存在,我們就要註冊它。只要到 app/Providers/AuthServiceProvider.php 找到屬性 policies 陣列填入即可

Writing Policies 編撰政策

app/Policies/PostPolicy.php 在 create() 通常如新增文章,不太需要 Post Model 的寫法,update() 注入兩個模型 User 與 Post。方法會返回布林值,true 代表授權成功,false 會跳出未授權的結果。

 

Authorizing Actions Using Policies 使用政策的授權行為

下面會配合以 Post Model 為說明範例,有 4 種方式:

1. 透過 User Model 使用者模型

假設寫在控制器中,找會員編號 2 是否有授權,可使用 can() 或 cant()。因為上面已經把 Policy 政策註冊在 app/Providers/AuthServiceProvider.php 所以這兩個方法可以使用。

不須使用 Post Model 的寫法

 

2. 透過 Moddleware 中介層

不需使用 Post Model 的寫法

 

3. 透過 Controller 控制器

不需要 Post Model 的寫法

4.  透過 Blade Template 刀片模板

也可以透過 @if 或 @unless

不需要使用 Post Model 也是把 $post 替換成 「App\Post::class」即可。

Mail

前往查看簡單教學:透過 Gmail 發送 E-mail 信件

jQuery – plugin – period – 批次讓元素間隔時間執行

jquery.period.js

如果想要「將指定的元素集合,批次間隔固定時間去做一些事情」那麼可以用這支非常簡單的 plugin。

安裝

前往 Github 下載 或是使用 npm 下載

載入方式

 

範例

這個範例是讓所有的 .item 間距 200 毫秒,批次動畫的增加高度。

我們看實際範例:

 

jQuery – 在移動裝置中無法 focus() 如 input 的元素問題 (jQuery UI Touch Punch 造成)

為了在行動裝置上能夠啟用 jQuery UI 的拖曳行為如 Draggable , 我們通常會添加外掛 jQuery UI Touch Punch來支援。

不過一旦添加以後,在指定的拖曳區塊中如果含有 <input> <textarea> <select> 卻會造成無法 forcus() 的困擾。其實只要添加這段就可以繞過這個問題

參考

php – Codeigniter – 在任何地方都能使用 CI 開發

繼承前一篇 Codeigniter – 如何讓 System 交給 Composer 保管

最近因為要在 Codeigniter 以外使用 Codeigniter 的工具,花了一兩天思考,後來受到製作 Codeigniter Restful 的 Chris Kacerguis 啟發,想到原來可以這麼設計。

假設我們想把已經寫好的 Codeigniter 類別庫、或是想使用 Codeigniter 的工具,用在如應用在其他 CMS、其他框架、傳統 PHP 的話,那該如何橋接呢?很簡單,改改名稱就好。

 

修改路徑與檔名

  • application/ 替換成 ci_app/
  • index.php 替換成 bridge_codeigniter.php

bridge_codeigniter.php 本來是 Codeigniter 的 index.php,在這個範例中為了語意化,我們不使用 index.php 。

 

替換 Codeigniter application 位置

瀏覽器開啟 bridge_codeigniter.php 應該也能看到 Codeigniter 的歡迎畫面,不過我們其實不需要了。

 

刪除 Welcome 歡迎畫面

ci_app/controllers/Welcome.php

 

建立測試文件

新增一個 helloworld.php

我示範了 Codeigniter 的字串加解密類別庫,瀏覽器打開 helloworld.php 能看到結果。這樣一來,就能在任何 PHP 底下執行 Codeigniter ,接著發揮你的創意吧。

雖然這種使用方式無疑會跑完整個 codeigniter 生命週期,但因為 CI 的效能算是框架中快速的,中小型開發不會有太大的影響,所以這是一種把 Codeigniter 接在其他系統底下的方式,但是否使用就取決於你的決定。