今天來摸索的是laravel Request 請求,一般請求指的是$_GET、$_POST...等,原生的php是自己使用$_GET、$_POST去取得表單或者ajax之類回傳的資料,並且使用isset來判別確保萬一沒收到值也不會有問題。
這方面也有許多框架延伸出對應的方式,減低開發者需要注意的事項,以我所知的是使用類似封裝的方式來做,白話來說就是把$_GET、$_POST…等請求打包起來,你需要就呼叫我打包後的class/function,我會吐回值/陣列給你,以防未宣告等相關事情我也幫你做好的概念。
取得所有的請求
$input = $request->all();
取得某個值$name = $request->input('name');
從這裡可以看出,其實我們並不知道name是從GET還是POST來的,但我們就是能拿到!
給某個值預設值$name = $request->input('name', 'Sally');
萬一沒有name,就幫我來個$name = sally
當處理表單input name[]時,存取input陣列方式
$remark= $request->input('remarks.0');
$remarks= $request->input('remarks');
只取某一部分的資料(陣列中的某個值)$input = $request->only('username', 'password');
確認輸入的值是否存在
if ($request->has('name')) {
//
}
實作:
來玩看看request,需要先到Route建立一下
Route::get("/login", "MemberController@loginForm")->name("loginForm");
Route::post("/login", "MemberController@loginProcess")->name("loginProcess");
之後來新增一個view
/resoucre/views /loginForm.blade.php。
<form action="{{ url("/login") }}" method="post">
{{ csrf_field() }}
使用者:<input type="text" name="username">
密碼:<input type="text" name="password">
備註1:<input type="text" name="remarks[]">
備註2:<input type="text" name=" remarks[] ">
<button type="submit">登入</button>
</form>
使用artisan建立一個Controllerphp artisan make:controller MemberController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MemberController extends Controller
{
public function loginForm()
{
return view("loginForm");
}
public function loginProcess(Request $request) {
echo $request->input("username")."<br/>";
echo $request->input("password")."<br/>";
$remarks = $request->input('remarks');
print_r($remarks);
echo $remark = $request->input('remarks.0');
print_r($input = $request->only('username', 'password'));
print_r ($input = $request->all());
}
}
輸入http://localhost:8000/login 玩看看
要注意的是$request回傳的是什麼型態,如果是陣列又使用echo的話,是會報錯的喔!!!!
今天這樣跑一次,我們也算實作了laravel簡單的表單傳遞以及取值的方式了,這樣也算是達成一個小應用囉!!!