Laravel基礎・簡単なDB連携・フォーム

More than 1 year has passed since last update.


前提知識


  • SSH


    • 暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。



  • URI


    • URL⊂URI。URLとの違いはあんまり気にしなくていいかも。



  • MVC  MVCを理解する


    • Model: ビジネスロジックを記述する。

    • View: Modelを表示する。

    • Controller: Viewの入力を受け取って判断し、Modelを起動する。




Laravel入門

参考: ビギナーのためのLaravel入門


Routing

「どのアドレスにアクセスしたら、どの処理を実行するか」を記述する。routes.phpに記述する。

あくまでルート情報を管理するためのもの。


  • 場所: /app/Http/routes.php


  • Route::get( アドレス , 関数 )


    • GETアクセスされた際のルーティングを設定する。

    • 第一引数のアドレスにアクセスすると、第二引数の関数が実行される。




View

Laravelでは、画面の表示用のテンプレートをあらかじめ用意しておき、それを利用して画面表示を行うことができる。そのテンプレートの置き場所。


  • 場所: /resources/views


  • view( テンプレート , 連想配列 )


    • テンプレートを表示する。変数に代入することもできる。




routes.php内に記述

Route::get('/helo', function () {

return view('helo',['message' => 'Hello!']);
});


views/helo.php

<!doctype html>

<html>
<head>
<title>Sample</title>
<style>
body { color:gray; }
h1 { font-size:18pt; font-weight:bold; }
</style>
</head>
<body>
<h1>Sample</h1>
<p><?php echo $message; ?></p>
</body>


Controller

画面に表示する詳細などをすべてRoutingに記述するとごちゃごちゃする。

そこで、Controllerでテンプレートの処理などを行う。


  • 場所: app/Http/Controllers


  • Route::controller( アドレス , コントローラー名 );


    • 指定されたアドレス下にアクセスされると、自動的にそのコントローラーに処理が渡される。




routes.php内に記述

// ~.com/heloにアクセスされると、HeloControllerの関数inputに処理が渡される

Route::get('helo', 'HeloController@input');


heloController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class HeloController extends Controller
{
public function input()
{
// views/helo.phpを表示する
    return view('helo', ['message' => 'Hello!']);
}
}



Blade


apple.php

@section('header')@stop



orange.php

@yield('header')


apple.phpで記述した中身をorange.phpに出力できる


DBの操作


参考


app直下でDBや関数の定義をする


(テーブル名).php

namespace App;

use Illuminate\Database\Eloquent\Model;

class (テーブル名) extends Model{
//laravelでは必要
const CREATED_AT = null;
const UPDATED_AT = null;

//primaryKeyがidの場合は指定しなくても良い
protected $primaryKey = '(プライマリキー名)'
protected $table = '(テーブル名)'
//option
protected $fillabel = ["(カラム名1)","(カラム名2)",...,"(カラム名X)"]
}

//関数(テーブル操作系)
public function ...



Controllerで関数を呼び出す


Controllers/hogeController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\(テーブル名_頭大文字);

//DB保存
$テーブル名 = new テーブル名;
$テーブル名->カラム名 = 変数;
.
.
.
$テーブル名->save();



DBを検索して値を取得

(参考)

HogeClassテーブル

column1
column2
column3

...
...
...

欲しい値
検索ワード
ほげ

...
...
...



$serchVal = "検索ワード";

$resultVal = Hogeclass::select('column1', 'column2')
->where('column2', '=', $searchVal)
->value("column1");

$resultValに”欲しい値”が格納されている。


DBのレコードを並び替えてビューで表示する

例として、社員(shain)テーブルのレコードを主キー(id)降順で並び替える。

以下の関数をコントローラクラス内に追加。


hogeController.php

public function hoge1(){

$shains = Shains::orderBy('id', 'DESC')->get();
return view('hogeView', ['shains' => $shains]);
}

ビューでの呼び出し方。


hogeView.blade.php

foreach ($shains as $shain) {

echo $shain->name;
}


laravelでフォームを作る


Routing(受け取り先の指定)


routes.php

Route::get('/', 'indexController@input');

Route::post('res', 'indexController@res');

indexController.phpのres関数にpostする。


Controller(フォームから受け取る)


indexController.php res関数

class indexController extends Controller{

public function res(Request $request){
//フォームから受け取る
$フォームのname = $request->input('フォームのname');
.
.
.
//DB保存
}
}

Requestクラスを使うのがlaravel5流らしい。


その他


  • PJ/storage/logsにエラーログが出ている。