前回に引き続いてリクエストの話です。ブラウザがないとリクエスト(Request)のオブジェクトが作成できない、とは限りません。Laravelならコマンドラインで作成できます。どうやって?
リクエストオブジェクトの作成
コマンドラインと言えばもちろん、tinkerのことです。以下のように、クラスのcreate()
メソッドを使って、リクエストのオブジェクトを作成できます。
Psy Shell v0.9.3 (PHP 7.1.14 — cli) by Justin Hileman >>> $request = \Illuminate\Http\Request::create( 'http://localhost' , 'GET' , [ 'name' => 'test' ]); => Illuminate\Http\Request { #2324 ⚠: Symfony\Component\VarDumper\Exception\ThrowingCasterException { #2309 #message: "Unexpected ErrorException thrown from a caster: Undefined index: ", }, +attributes: Symfony\Component\HttpFoundation\ParameterBag { #2320}, +request: Symfony\Component\HttpFoundation\ParameterBag { #2322}, +query: Symfony\Component\HttpFoundation\ParameterBag { #2321}, +server: Symfony\Component\HttpFoundation\ServerBag { #2317}, +files: Symfony\Component\HttpFoundation\FileBag { #2318}, +cookies: Symfony\Component\HttpFoundation\ParameterBag { #2319}, +headers: Symfony\Component\HttpFoundation\HeaderBag { #2316}, } |
Laravelのリクエストは、Symfonyのクラスがベースになっているようです。create
は、Laravelのクラスのメソッドではなく、Symfonyのクラスのメソッドです。参考のために、以下にその定義の一部を掲載します。
/** * Creates a Request based on a given URI and configuration. * * The information contained in the URI always take precedence * over the other information (server and parameters). * * @param string $uri The URI * @param string $method The HTTP method * @param array $parameters The query (GET) or request (POST) parameters * @param array $cookies The request cookies ($_COOKIE) * @param array $files The request files ($_FILES) * @param array $server The server parameters ($_SERVER) * @param string|resource|null $content The raw body data * * @return static */ public static function create( $uri , $method = 'GET' , $parameters = array (), $cookies = array (), $files = array (), $server = array (), $content = null) { .. |
先のtinkerの実行では、create()
の3番目のパラメータに、連想配列で値(['name' => 'test']
)を渡しました。ということは、以下のtinkerの実行で変数の取り出し可能です。
>>> $request->all(); => [ "name" => "test" , ] >>> $request->input(); => [ "name" => "test" , ] >>> $request->name; => "test" >>> $request->input( 'name' ); => "test" >>> $request->get( 'name' ); => "test" >>> |
前回に説明したことが、ここで簡単にシミュレートできるのです。
そして、さらに、こんなこともテストできます。簡単なValidationのテストです。
>>> $request->validate([ 'name' => 'required' ]); => [ "name" => "test" , ] >>> $request->validate([ 'name' => 'required|alpha' ]); => [ "name" => "test" , ] >>> $request->validate([ 'name' => 'alpha' ]); => [ "name" => "test" , ] >>> $request->validate([ 'name' => 'numeric' ]); Illuminate /Validation/ValidationException with message 'The given data was invalid.' >>> |
Validationに成功したら、入力の連想配列を返し、失敗したらValidationExceptionを返します。
tinkerの便利さは、いちいちプログラムを書かずに、ブラウザを立ち上げることなしに、テストできることです。こんな便利なツールを習得せずに、Laravelを語ることはできません。
メルマガ購読の申し込みはこちらから。