キーウェブコーポレーションのサイトです | キーウェブコーポレーションでは最新技術と自然との調和を目指します。

キーウェブコーポレーションの取り組み

この備忘録は、筆者が初めてLaravel5.6に携わったときに気が付いた点を思いついた順に書き連ねたもの。
なお、当サイト自体は、Laravel4.2が使われている。Lolipopでcomposeしたところ、この古い版がダウンロードされたのだ!

Laravelの構造について
php artisan make:
コマンドを使っての構築は、Laravel直下で行う
※artisanがあるディレクトリのことになる。
app/Http/Controllers
PHPのプログラムが入る
php artisan make:controller FormControllerXxxxxxController による生成
頭文字は大文字で、XxxxxxController.phpの形式
routes/web.php
Controllerの実行は、ルーティングにて設定する
Route::get('/mainteMailMagazineSearch', 'MaintMailMagazineController@search');
前者がルート名、後者が実際のルート設定

引数を渡す場合
Route::get('/model/{type?}', 'SampleController@model');

リダイレクト用に省略形が設定できる
Route::get('/mainteMailMagazineSearch', 'MaintMailMagazineController@search')->name('magazine-search');

HTTPメソッドとControllerメソッドの対応
get :一覧(Controller.index)、作成(Controller.create)、詳細(Controller.show)、編集(Controller.edit)
post :作成(Controller.store)※viewがpost渡しの場合
put :編集(Controller.update)
patch :編集(Controller.update)
delete :削除(Controller.destroy)

getとpost両方が使えるように、Route::match(['get','post'], ~);という方法もある

直接Viewに遷移することも可能
Route::view('/welcome', 'welcome');
resources/views
JavaでいうJSPが入る
Laravelは、xxxxx.blade.phpの形式

フォームは、通常の
仕様による
※Laravel5.4以前ではフォームヘルパーが使えた

POST渡しする場合は、
直後におまじない
@csrf

Controllersなどからの変数は、{{ $xxxxx }}で受ける
htmlspecialchars関数によるエスケープされる→{{ }}
エスケープされない→{!! !!}
たとえば、textareaの内容を表示する場合、controllerでnl2br()し、viewで{!! !!}表示させると、改行表示される

制御構文は、基本的には以下のように@を使う
@if (count($records) === 1)
    1レコードある!
@elseif (count($records) > 1)
    複数レコードある!
@else
    レコードがない!
@endif

なお、blade内では、変数への代入が
<?php $xxxx = 'XXX'; ?>
の形式で可能
※Laravel5.4での現象らしく、以前では{{--*/$xxxx = 'XXX'; /*--}}が使えた

基本的には、blade内では変数代入などの式は使えない前提で、代入はControllerで極力行う

コメントは、{{-- CSS --}}の形式
Requests
フォームリクエストによるバリデーション
          Controllerへの直書きによるバリデーションは確認済

以下、個別にRequestを生成した場合
php artisan make:request PostRequestによる生成
各Controllerのsave、updateメソッドに
public function save(PostRequest $request)の形式で組み込む

blade側でのエラー表示
変数$errorsにエラー内容が渡されるので、blade側で
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
のように出力する
※alert-dangerは、bootstrap仕様
app/Models
データーベースアクセスを行う
Eloquent ORMを使い、Laravel直下で
php artisan make:model User
により生成(Userモデルの場合)するのがよい
Laravel 認証方式
やらない方がいいかも。本来、手順通りに立ち上げれば、こんなことは考える必要もない。別のシステムを組み替えたことでこんなことも考える必要があった。
vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php
public function validateCredentials(UserContract $user, array $credentials)
で、送られてきた'password'と、$user内の'password'をチェックして、存在を確認している。
テーブルのパスワードフィールド名が'password'でないと面倒が起きるので、
手前の
vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php
public function attempt(array $credentials = [], $remember = false)
で$userが取得出来たらTRUEを返すように変更する
    if($user){
        //if ($this->hasValidCredentials($user, $credentials)) {
            $this->login($user, $remember);

            return true;
        }
PDOドライバ
データベース関連で、もし、自分の環境でclass 'pdo' not foundが出たら・・・
1.php -m で、PDOとpdo_mysql があるか確認
2.なければ、以下の手順をお試しのこと
  (1)sudo か root
    ※以下はrootでの場合
  (2)たぶん、依存の問題が出るのでコマンドは以下
    # yum install --enablerepo=remi,remi-php72 php-pdo
    # yum install --enablerepo=remi,remi-php72 php-mysql
  (3)php.iniの修正
    [root@ip-172-31-46-105 etc]# vi php.ini
    /extensio で検索
    i とかで挿入モードにして
    自分は、For example の下の空いているところに
    extension=pdo.so と入れた
    :wq で書き込んで元に戻る
  (4)再起動してから、ブラウザを立ち上げてうまくいったか確認