2018-11-27 / JSN / 0 Comments / 433 次瀏覽
Laravel 5.7 預設會回傳 404 的 view。如果我們製作 API 希望回傳的是 JSON 格式的 404,那麼參考以下修改。
app\Exceptions\Handler.php
public function render($request, Exception $exception)
{
if ($this->isHttpException($exception))
{
if ($exception->getStatusCode() == 404)
{
return response(json_encode(['error' => 'Not found.']), 404)
->header('Content-Type', 'application/json');
}
}
return parent::render($request, $exception);
}
參考
2018-10-14 / JSN / 0 Comments / 3,649 次瀏覽
參考官方章節
.env 設定檔
關於使用 Gmail 的設定,可以注意這篇我提到的:在 PHP 中使用 Gmail SMTP 無法驗證的方法。透過這篇步驟,我們理當能取得下方 SMTP 的各個資訊包含密碼,我們填入吧!
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=帳號
MAIL_PASSWORD=密碼
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=fdjkgh580@gmail.com
MAIL_FROM_NAME=fdjkgh580
要使用全域的 “from” (寄件者地址) 或 “reply_to” (回覆的地址),在 config/mail.php 中能發現是透過 .env 來寫入我們的 mail 設定檔,例如
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
......
Mailables
準備一個”能夠發送郵件” (Mailables) 的類別,例如產生 app\Mail\Warning.php
php artisan make:mail Warning
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Warning extends Mailable
{
use Queueable, SerializesModels;
public $params;
// 讓外部可以將參數指定進來
public function __construct($params)
{
$this->params = $params;
}
public function build()
{
// 透過 with 把參數指定給 view
return $this->subject("警告訊息")
->view('emails.warning')
->with([
'params' => $this->params,
]);
}
}
View
而信件內容模板的變數 $params 我們會由 Controller 傳入。我們建立 /views/emails/warning.blade.php
<p>
{{ $params['say'] }}
</p>
Router
routes/web.php
Route::get('/warning', 'WarningController@send');
Controller 寄出郵件
php artisan make:controller WarningController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// 記得使用 use
use Illuminate\Support\Facades\Mail;
use App\Mail\Warning;
class WarningController extends Controller
{
public function send()
{
// 收件者務必使用 collect 指定二維陣列,每個項目務必包含 "name", "email"
$to = collect([
['name' => 'Jason', 'email' => 'fdjkgh580@gmail.com']
]);
// 提供給模板的參數
$params = [
'say' => '您好,這是一段測試訊息的內容'
];
// 若要直接檢視模板
// echo (new Warning($data))->render();die;
Mail::to($to)->send(new Warning($params));
}
}
這樣就能成功透過 Gmail 發送郵件囉!附帶要提的是,以上這種方法是 Laravel 比較後期的官方建議寫法,不然依照我們過去經驗例如使用過 PHPMailer ,我們可能會寫在一起,例如
Mail::send('emails.welcome', $data, function($message)
{
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
$message->attach($pathToFile);
});
雖然也可以送信,不過透過 “Mailable” 的方式,可以把整個網站的發送指派行為,全部集中在路徑app\Mail 底下;剩下在控制器中的行為也只有「用哪個 Mailable 寄給誰」。
好處就是方便維護。當我們的發送郵件行為一旦增量,例如有些要發送註冊通知信、修改密碼信、訂單成立、到貨通知、系統錯誤通知、等等非常多,要維護也只需要查看路徑 app\Mail 底下的 “Mailable” 就能很快知道有那些送件行為,省去到各個 Controller, Services, Libraries 查找的時間。
2018-04-20 / JSN / 1 Comment / 69 次瀏覽
參考來源
範例元件名稱 com_todolist
添加我們自訂的 xml
- name=”clickme” 名稱是作為 tmpl 渲染使用,代表你的欄位叫什麼名字。
- type=”mybutton” 會去尋找 models/fields/mybutton.php
<?xml version="1.0" encoding="utf-8"?>
<!-- components/com_todolist/models/forms/upload.xml -->
<form>
<fieldset name="others" addfieldpath="components/com_todolist/models/fields/">
<field name="cliekme" type="mybutton" label="我是自訂欄位" />
</fieldset>
</form>
自訂欄位的物件邏輯
我們要自訂一個類型叫做 mybutton 的 HTML <button> 元件。
- JFormFieldMybutton 為 JFormField{首字大寫你的類型名稱}
- $type 設定首字大寫你的類型名稱
- 務必指定 protected function getInput(),這是為了覆寫 JFormField 的方法。
<?php
// components/com_todolist/models/fields/mybutton.php
defined('JPATH_BASE') or die;
class JFormFieldMybutton extends JFormField
{
protected $type = 'Mybutton';
protected function getInput()
{
return '<button onclick="alert()">我是按鈕</button>';
}
}
在 tmpl 中渲染
<!-- C:\www\joomla\components\com_todolist\views\upload\tmpl\main.php -->
<?=$this->form->renderField('cliekme')?>
2017-12-26 / JSN / 0 Comments / 4,614 次瀏覽
Ubuntu 16 重啟系統 service apache2 restart 報錯
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
於是下指令查看問題
systemctl status apache2.service
發現提示如下圖

發現原來是我的 /etc/phpmyadmin/apache.conf 的第 4 行設定錯誤 (我用了兩個別名),於是使用
vim /etc/phpmyadmin/apache.conf
修改我的檔案以後,重新啟動 Apache 就沒問題了~