Laravelでsay Hello Worldの話
前回はHello Worldと言うわけで、helloを表示するだけのページを作りました。
今回は、リクエストに対してそのリクエスト(Hello World)を表示します
方法ってのはシンプルです….
まずは。引数をどうするか?
- GETリクエストで取る 例) say?word=hello
- POSTリクエストから取る
- パスで取る 例say/hello
うん、シンプルなんですよね
第一章 GETでリクエストを取る…
今回はTDDでしようかな…
単純だしw
と言う事ではじめに、Featureテストを書きます。
tests/Feature/SayTest.php
/**
* sayページの動作検証
* Class HelloTest
* @package Tests\Feature
*/
class SayTest extends TestCase
{
/**
* シンプルな200疎通
*/
public function testBasicTest(){
$response = $this->get('/say?word=hello');
$response->assertStatus(200);
}
/**
* helloリクエストの動作検証
*/
public function test_hello_contents(){
$response = $this->get('/say?word=hello');
$contents = \File::get(storage_path('tests/Feature/say/contents.txt'));
$this->assertEquals($contents,$response->getContent());
}
}
解説は前回の番外編でしましたので解説はスキップ!
storage/tests/Feature/say/contents.txt
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>say hello</title>
</head>
<body>
<h1>say hello</h1>
</body>
</html>
hello が表示されているだけです
早速ルートを作ります
routes/web.php
use App\Http\Controllers\SayController;
Route::get('/say', [SayController::class, 'get']);
次は、Controllerを…
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SayController extends Controller{
public function get(Request $request){
$word = $request->input('word');
$data = ['word' => $word];
return view('say',$data);
}
}
ここでは、get引数にRequestを使っています。そこで引数を取るって感じですね
次は View sayです
say.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<title>say hello</title>
</head>
<body>
<h1>say {{$word}}</h1>
</body>
</html>
試験の内容と一致するようにします
ここまで来るとテストを実行します…
PHPUnit 9.4.3 by Sebastian Bergmann and contributors.
Time: 00:00.097, Memory: 20.00 MB
OK (2 tests, 2 assertions)
Process finished with exit code 0
超シンプルにできあがりました!ぱちぱちぱちぱち!
第二章 POSTリクエストから取る
POSTは少しややこしくなりますが… やっちゃいます!
試験は前回の流用…. 同じ Viewを使っちゃいますw
tests/Feature/SayTest.php
public function test_post(){
$response = $this->pot('/say',['word' => 'hello']);
$contents = \File::get(storage_path('tests/Feature/say/contents.txt'));
$this->assertEquals($contents,$response->getContent());
}
はい、試験はシンプルですね。連想配列をpostリクエストされます
次は… routeですね。
Route::post('/say', [SayController::class, 'post']);
Route::post部分はpostを処理しますという意味です。先ほどのはgetです
他には両方のanyなどがあります
次は、postメソッドのコントローラを作ります
public function post(Request $request){
$word = $request->input('word');
$data = ['word' => $word];
return view('say',$data);
}
メソッド名以外コピペですw
先ほどと同じ結果ページなので今回はviewページは作りません
試験を実行すると…
Time: 00:00.124, Memory: 20.00 MB
OK (3 tests, 3 assertions)
Process finished with exit code 0
OKです。
第三章 ルートパラメーターらしいw
これはちょっと独特な感じですが、引数名称で値を取得する方法です
hoge/1 => 1を取る
hogehoge/fuge => fugeを取る
ま、GETと組み合わされるので便利ですねえ。階層的にも出来るので、便利ですw
https://readouble.com/laravel/7.x/ja/routing.html
はじめに試験を作ります…
3回目なので楽ちんです
public function test_param(){
$response = $this->get('/say/hello');
$contents = \File::get(storage_path('tests/Feature/say/contents.txt'));
$this->assertEquals($contents,$response->getContent());
}
うん、これだけです
次はルートです
Route::get('/say/{word}', [SayController::class, 'param']);
ここでのポイントはURLに変数を指定しております。
コントローラに移ります
public function param($word){
$data = ['word' => $word];
return view('say',$data);
}
引数に値がそのまま使えるのでrequestもなくなって分かりやすいです
Viewは流用しているので無視!
試験を実行…
Time: 00:00.131, Memory: 20.00 MB
OK (4 tests, 4 assertions)
Process finished with exit code 0
うん、シンプルw
開発終了!!!
今回は引数を使えるWebページを作りました!
ま、難しくもないレベルですが、ちょっとトリッキーな部分もあるので勉強になりますね… 次回!
番外編を…. 次回にするw