Laravelでよく使うコマンドや実装についてまとめた記事です。 基本自分用メモですが、できるだけわかりやすく書こうと思います。 随時更新していく予定です、こういう使い方あるよ!という方はコメントいただけると嬉しいです。
uriの値を受け取り、画面に表示する。
$ vi routes/web.php
routeの設定
Route::get('hello/{id?}/{pass?}', 'HelloController@index');
Controllerの設定
$ php artisan make:controller HelloController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller {
public function index(Request $request) {
$data = [
'id' => $request->id,
'pass' => $request->pass
];
return view('hello.index', $data);
}
}
Viewの設定
$ vi resources/views/hello/index.blade.php
<html>
<head>
<title>Hello/Index</title>
</head>
<body>
<article>
<h2>ID, password</h2>
<p>ID : {{$id}}</p>
<p>PASS : {{$pass}}</p>
</article>
</body>
</html>
API
jsonを返す
class HelloController extends Controller {
public function index(Request $request) {
$response = array(
"key1" => "value1",
"key2" => "value2"
);
return \Response::json($response);
}
}
Controllerでvalidateの実装
use Validator;
class HelloController extends Controller {
public function post(HelloRequest $request) {
Log::debug("HelloController post()");
$validator = Validator::make($request->all(), [
'name' => 'required',
'mail' => 'email',
'age' => 'numeric|between:0,150',
]);
// validator = Validator::make(値の配列、ルールの配列);
// クエリ文字に適用する場合は $request->query()にする。
// エラーが発生したらGETのページ/helloにリダイレクト。
if ($validator->fails()) {
return redirect('/hello')
->withErrors($validator)
->withInput();
}
/*
// エラーが発生したら422レスポンス
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
*/
return view('hello.index', ['msg' => '正しく入力されました!']);
}
}
Requestによるvalidateの実装
Requestの追加
$ php artisan make:request HelloRequest
validateの設定
$ vi app/Http/Requests/HelloRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class HelloRequest extends FormRequest {
public function authorize() {
// hello以外から利用できないようにする。
if ($this->path() == 'hello') {
return true;
}
return false;
}
public function rules() {
return [
'name' => 'required',
'mail' => 'email',
'age' => 'numeric|between:0,150',
];
}
public function messages() {
return [
'name.required' => '名前は必ず入力して下さい。',
'mail.email' => 'メールアドレスが必要です',
'age.numeric' => '年齢を整数で記入下さい',
'age.between' => '年齢は0〜150の間で入力下さい',
];
}
}
Controllerの使用例
use App\Http\Requests\HelloRequest;
class HelloController extends Controller {
// HelloRequestを引数にする。
public function post(HelloRequest $request) {
...
...
}
}
Route
キャッシュのクリア
$ php artisan route:cache
確認
$ php artisan route:list
Log
https://readouble.com/laravel/5.5/ja/errors.html
Logのネームスペース
use Illuminate\Support\Facades\Log;
Log出力
Log::debug("test");
Logをtailで流す
$ tail -f storage/logs/laravel.log
Config
設定ファイルのサンプル
$ vi config/hello.php
<?php
return array(
'greet' => array(
"japan" => "こんにちは",
"USA" => "hello"
),
'path' => "test"
);
読み込み方法
use Config;
$read_conf = Config::get('hello.greet');
if (is_null($read_conf)) {
echo "config file is nothin.";
} else {
echo $read_conf["japan"];
}
configディレクトリ内にフォルダを作成してまとめたい場合
$ cat config/hello/greet.php
<?php
return array(
'greet' => array(
"japan" => "こんにちは",
"USA" => "hello"
),
'path' => "test"
);
同じく.で繋ぐことにより読み込める。
$read_conf = Config::get('hello.greet.greet');
キャッシュクリア
$ APP_ENV=local php artisan config:cache
Env
https://readouble.com/laravel/5.dev/ja/configuration.html
適用されている環境名(APP_ENV)の取得
$env = \App::environment();
適用されている環境で処理を分岐させる
if ($app->environment('local'))
{
// 環境はlocal
}
if ($app->environment('local', 'staging'))
{
// 環境はlocalかstaging
}
環境を変更する
$ APP_ENV=staging php artisan config:cache
DB
Configファイル
$ vi config/database.php
$ vi .env
ControllerでSQL実行
use Illuminate\Support\Facades\DB;
~~中略~~
$items = DB::select('select * from people');
return view('hello.index', ['items' => $items]);
Viewで表示
@foreach ($items as $item)
<div>
{{$item->name}}
{{$item->mail}}
{{$item->age}}
</div>
@endforeach
Eloquent
https://readouble.com/laravel/5.5/ja/eloquent.html
Modelの作成
$ php artisan make:model Person
Controllerで読み込み
$items = Person::all();
migrate
migrateの作成
$ php artisan make:migration create_people_table
migrateの実行
$ php artisan migrate
seed
seedの作成
$ php artisan make:seeder PeopleTableSeeder
seedの設定例
$param = [
'name' => 'taro',
'mail' => 'taro@yamada.jp',
'age' => 12
];
DB::table('people')->insert($param);
seedの実行
$ php artisan db:seed
test
$ vi tests/Feature/HelloTest.php
testの作成
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class HelloTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testHello()
{
$this->assertTrue(true);
$arr = [];
$this->assertEmpty($arr);
$msg = "Hello";
$this->assertEquals('Hello', $msg);
$n = random_int(0, 100);
$this->assertLessThan(100, $n);
$response = $this->get('/');
$response->assertStatus(200);
}
}
実行
$ vendor/bin/phpunit