2015年7月31日 星期五

用單一 Middleware 進行所有 Model 的資料驗證

Laravel 5 的 Form Request 很好用,不過對於每一個 Model 都要建立一個 Form Request 也有點小麻煩,下面這篇文章的作法值得參考,原則上就是把驗證規則寫在 Model Class,建立一個 Middleware,接受 Model Class Name 為參數,在 handle() 執行 input 驗證,在套用 Middleware 時將 Model Class Name 傳入即可。

LARAVEL 5.1.X – MIDDLEWARE FOR INPUT VALIDATION

這一篇用 Middleware 做 ACL 也不錯:

LARAVEL – 5.1.X ACL USING MIDDLEWARE

2015年7月27日 星期一

Laravel 5.1 自訂忘記密碼之信件主旨

忘記密碼即重設密碼是由 Auth/PasswordController.php 處理,其中使用了 ResetsPasswords trait,查看 vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php,其中:

protected function getEmailSubject(){    return isset($this->subject) ? $this->subject : 'Your Password Reset Link';}


看到 $this->subject 了沒....

所以要自訂忘記密碼之信件主旨,只要在
app/Http/ControllersAuth/PasswordController.php 中:


use ResetsPasswords;
protected $redirectTo = '/';
protected $subject = '重設密碼';


另外重設密碼之後預設會將 user 登入並轉向至 /home,要更改就如上面所示,設定 $redirectTo 即可。

ps. $redirectPath 也可以,且優先於 $redirectTo


如果考慮多國語系,則可以參考這一個討論串

2015年7月20日 星期一

[ 工具 ] 往下捲隱藏導覽列,往上捲顯示:Bootstrap Auto-Hiding Navbar

網頁超過一頁的長度時,往下捲動一定距離後自動隱藏導覽列,往上捲動時顯示導覽列。

Bootstrap Auto-Hiding Navbar 可以很方便的作到。

官網 Github

官網上的說明很詳細,要注意 jquery css selector 要依據實際的情況設定

無窮分類選單列表 in Laravel ver. 2

程式碼範例第二版

第一版的差別:

  • 在Model中定義關聯(1對多,自己關聯自己,只需要 多 的部份即可)
  • Controller中只取第一層分類
  • View中遞迴引入相同模板,在模板中處理子分類

2015年7月19日 星期日

Laravel 中實現無窮分類列表

無窮分類列表中,每一個分類可能有子分類,也可能有上層分類,階層深度理論上可以無限分層,如果要將所有階層的分類像目錄結構一般一次列出,在 laravel 中該怎麼做?



傳統 PHP 的寫法可以參考 tad 的這一篇文章,基本上就是運用遞迴函數,從最上層一層一層抓出來,然後組合出 html 碼。

Laravel 因為是 MVC 架構,所以資料和畫面要分開處理。(程式碼範例

資料部份在 controller 中取得,同樣是利用遞迴方式,每個節點都是一個包含2個元素的陣列:

2015年7月16日 星期四

[ 工具 ] wow.js + animate.css

wow.js + animate.css 真是像我這種一點藝術天份也沒有的苦手救星啊~~~~

教學:

http://tt5.org/tag/animate-css/

2015年7月12日 星期日

[ 筆記 ] PHP 之 ArrayAccess interface

官網文件

用途:把物件當陣列操作

須實作的方法,以陣列方式操作物件實會自動呼叫相對應的方法:
offsetExists
依據 key 是否有值,回傳 boolean

offsetGet
依據 key 取值

offsetSet
依據 key 賦值,無回傳值

offsetUnset
依據 key 取消(unset)其值,無回傳值

2015年7月9日 星期四

Laravel 分頁變更頁碼參數名稱

Laravel 的分頁很方便,不過如果要將預設頁碼參數由page更改為其他名稱要怎麼做?

官網的使用手冊好像沒有提到,於是從 api 文件挖了出來....

http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Builder.html#method_paginate

paginate 有 3 個參數,意義如下:

參數1:分頁筆數,預設每頁 15 筆

參數2:Model 取出之欄位,為一個陣列,預設為全部 ['*']

參數3:頁碼參數名稱,預設為 'page'


example:

$posts = \App\Post::paginate(10, null, 'p');

代表一頁 10 筆,取出所有欄位,頁碼參數為 p

Laravel seeder for foreign key

當資料表設定連外鍵時,seed 時要特別注意,否則會失敗喔。 

解法: https://gist.github.com/isimmons/8202227

加入:
// 開始前先關閉外鍵限制
DB::statement('SET FOREIGN_KEY_CHECKS=0;');

// 最後再打開外鍵限制
DB::statement('SET FOREIGN_KEY_CHECKS=1;');

2015年7月8日 星期三

Laravel 中依環境註冊 service provider / facade

有些 Service Provider / Facade 只有在開發時才用的到,上線時不需用到,如果不想手動處理,那就讓程式自動判斷吧。

app/Providers/AppServiceProvider.php

register function 中處理:

See the Pen bdvjpd by t301000 (@t301000) on CodePen.

2015年7月4日 星期六