Category: Laravel
-
Laravel 4.x WhoopsDisplayer::display() must be an instance of Exception
有個用 Laravel 4.2 開發的舊專案,近來經常遇到下面這個錯誤 PHP Fatal error: Uncaught TypeError: Argument 1 passed to Illuminate\Exception\WhoopsDisplayer::display() must be an instance of Exception, instance of ParseError given 找了許多討論都提到是 Laravel 4.x 與 PHP 7 不相容的關係。但我的開發環境有 PHP 5.6 和 PHP 7,似乎前者也有機會發生,十分不解。 每當發生這個 Error 就不會看到真正的 Exception 訊息,debug 十分困擾。 Stackoverflow 上找到一個應急用的解法,可以用在開發環境上…. 在 app/config/local/app.php 的檔案開頭加兩行 set_error_handler(null); set_exception_handler(null); 暫時搞定了…
-
將 Sequel Pro 的表導出成 Laravel migration 文件
在 Laravel 學院看到一篇有趣的文,筆記下。 将 Sequel Pro 中已存在的数据表导出为 Laravel 迁移文件 對於用 Mac 的開發者來說頗為實用。Sequel Pro 這款 MySQL GUI 也是我用過最好用、最順手的 DB 管理工具,沒有之一,輕巧高效,可惜支援的 DB 種類不多。
-
Connection could not be established with host
最近重灌了工作用的筆電,把開發環境的 PHP 升級到 5.6.10,然後就各種狀況….. 其中一個問題是從本機連不上公司 mail server,所以寄信功能就掛掉了。Laravel log 的訊息如下 local.ERROR: 500 – Connection could not be established with host xxx.com.tw [ #0] @ / exception ‘Swift_TransportException’ with message ‘Connection could not be established with host xxx.com.tw [ #0]’ in laravel/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php:270 原來是因為從 PHP 5.6 開始,變更了 SSL 認證的預設值,verify_peer 與 verify_peer_name 這兩項安全檢查都被改為預設,然後很多 SSL verification 就過不了。雖然提高安全性是好事,但開發環境卻造成一些困擾。 以上述的 swiftmailer 套件為例,它的…
-
Laravel 5.0: 紀錄 SQL 指令
在同事轉貼的一些文章裡翻到這篇记录运行时SQL语句,稍微修改一下,在我的 Laravel 5.0 測試站上實作。 文章中的第一步我就傻眼了,因為我的 php artisan list 裡面沒有 make:listener….
-
Laravel 4 Async Queue Driver
在 Github 上找到一個有趣又實用的 Laravel 4 套件:Laravel 4 Async Queue Driver。 Laravel 4 有支援 Queue,但是對小型或是開發中的專案來說,特地去弄一套 Queue Worker 並不是很便利,但是用 Sync Mode 又很浪費時間,因為 Sync Mode 真的要等系統把排程跑完才會繼續執行之後的程式碼…. 這時候 Async Driver 就派上用場了。這組 driver 會用子執行緒的方式在背景跑 Queue,雖然是立即執行式 (fire instantly),跟 “Queue” 的理念不太一樣,但已足以應付許多需求。 ps. 圖片與本文無關
-
Laravel Eloquent – Encrypt/Decrypt Data on call
在開發商業網站的時候,對資料加密是必要的手段,尤其是資料庫中關於會員隱私,或是商業機密的部份都要特別處理。 在實務上通常不會用資料庫內建的加密功能,而是用後端語言來實現 encrypt 與 decrypt,資料庫只儲存加密後的訊息。 在 Laravel 裡加解密可以透過繼承 Eloquent,用 magic function 來達成自動化。 class BaseModel extends Eloquent { protected $encrypt = []; public function setAttribute($key, $value) { if (in_array($key, $this->encrypt)) { $value = Crypt::encrypt($value); } return parent::setAttribute($key, $value); } public function getAttribute($key) { if (in_array($key, $this->encrypt)) { return Crypt::decrypt($this->attributes[$key]); } return parent::getAttribute($key); } public function attributesToArray()…
-
Output Laravel 4 View as String
覺得 Laravel 這套框架真的有很多眉眉角角的。 這回遇到的是要將 View::make() 的結果當成文字回傳,但 View::make() 回傳的內容似乎是包含 http header 的,無法直接存成純文字。 網路上找到兩種解法,都是官方文件裡沒提到的用法….. #$%^&* $html = (string) View::make(‘foo’, [‘bar’ => ‘baz’]); $html = View::make(‘foo’, [‘bar’ => ‘baz’])->render(); 兩者的差異是前者會遮蔽 Exception,而後者不會。
-
Trait for validating Eloquent models on save in Laravel 4.2+
https://github.com/dwightwatson/validating 這個 Laravel 外掛是在同事的程式碼中看到的,花了一點點時間了解,原來是個把 validation 綁定在 model 上的外掛,如此一來就可以在資料寫入資料庫之前自動進行一次 validation,不需要自己手動呼叫驗證程序,只要記得接 Exception 就可以。 安裝方式很簡單,現在 PHP 有 composer 這項神器加持。 開啟 Laravel 專案下的 composer.json,在 require 區段中加入宣告 “watson/validating”: “0.10.* 接著執行 composer update 更新套件。 使用方式參考官網的範例。 https://github.com/dwightwatson/validating/blob/0.10/README.md
-
Issue with Laravel Rules & Regex (OR) operator
換了新工作後才開始接觸 Laravel 這套 PHP framework,學習的過程碰到不少問題,跟之前慣用的 CodeIgniter 相比,Laravel 引了很多新觀念。 這天在使用 Laravel 內建的 Validation 作表單檢查的時候,發現 regex 規則怎麼寫都不會過….. (怒 規則如下: <?php $rule = array( ‘mode’ => ‘required|regex:/^(typeA|typeB)$/’ ); 執行時會一直收到如下的錯誤訊息… ErrorException preg_match(): No ending delimiter ‘\/’ found 苦惱了十分鐘後才在文件上看到這段話… Note: When using the regex pattern, it may be necessary to specify rules in an array instead of using pipe delimiters,…