Laravel 認証・バリデート

use Illuminate\Foundation\Auth\AuthenticatesUsers;
これは、 /vendor/laravel/framework/src/Illuminate/Foundation/Auth ここにあります。

ーーー

$validate_rule = [
‘name_e’ => ‘required’,
‘password_e’ => ‘numeric|between:0,9999’
];
$this->validate( $request, $validate_rule );

リクエストで受け取った値を、validate関数で検証する。ここでバリデーションに失敗した場合、validate以降の処理に進まずに、フォームに戻る。その際に$errorsを持って返る。

ーーー
オリジナル・バリデータ

ーーー
【認証のガードとは】
Guard:Config/auth.php
上のファイルにguardsの設定がある。Guardにはsessionとtokenがある。

slick スライダーのjQuery

wpに入れるときは、jsを読み込ませまして、下の方に

これを書いておく。
ーーー
モバイルで右側にはみ出すものがありますが、それは矢印です。
.slick-slider .slick-next {
right: 15px;
}
ーーー

Laravel データベースの使い方

Eloquentは、モデルを作らないと動かないぽい。
Eloquentは作成日時と更新日時を自動的に更新してくれる機能があるぽい。

class Registration extends Model
{
protected $fillable = [‘date’, ‘orderNo’, ‘memberNo’, ‘customerNo’, ‘roomNo’];
}

モデルで、fillableに変更するカラムを設定して、
$res = Registration::create($param);

これで、insertする。insertを使うよりも、Laravelの機能を使うので安全面などで諸々と優れているらしい。

$res = Registration::find(1);
プライマリーキーを指定して1件取得する。

ーーー

firstOrCreate() : データがあれば取得。なければ作成する。
updateOrCreate() : データがあれば更新。なければ作成する。

配列を作るなど

js

var foo = new Array();

配列を作成する。newなので、Arrayクラスをインスタンス化している。だからfooはオブジェクトということになる。

var foo = new Array(‘リンゴ’, ‘バナナ’, ‘イチゴ’);
var foo = [‘リンゴ’, ‘バナナ’, ‘イチゴ’];
コンストラクタになる。ちゃんと理解しろ。このへっぽこ野郎。

foo.length; //これで配列の数が返ってくる。
foo.fill(0); //配列の中身を全部0にする。

var result = foo.indexOf(‘リンゴ’);
配列を検索してインデックス番号を返す。

foo.push(‘トマト’); //配列を追加する

連想配列の扱い

var foo = {ringo: ‘りんご’, banana: ‘バナナ’, strawberry: ‘いちご’};

foo.ringo = “りんご”;
foo.banana = “バナナ”;
foo.strawberry = “いちご”;

foo[‘ringo’] = “りんご”;
foo[‘banana’] = “バナナ”;
foo[‘strawberry’] = “いちご”;

上の3つ。結果は同じ。

delete foo[‘りんご’]; //配列の削除

$(‘.rsvFlag’).each(function(index) {
$sendText[index] = { date : $(this).data(‘date’) , order : $(this).data(‘order’) };
});

ajaxで追加した要素にイベント

ajaxで追加した要素は、js読み込みの時点では存在していないので、後から追加する要素にイベント(クリックなど)を設定することができない。
#table_areaの中身をajaxで追加するとして、そのテーブルの中のtdにイベントを設定したい場合。

これでは動かない。tdがないから。
$(“td”).on(‘click’, function() {

こうする
$(“#table_area”).on(‘click’,’td’, function() {

#table_areaは最初から存在するものとする。
onの関数の二つ目の引数に、トリガーとなる要素を設定するのです。

複数のトリガーがある場合はこんな感じ。
$(“#table_area”).on({
‘mouseenter’: function() {
if(!$(‘#toggleCancelBtn’).prop(‘checked’)){
if ($(this).text() === “” && !$(this).hasClass(‘rsvFlag’)) {
$(this).addClass(‘hoverFlag’);
}
}else{
if ($(this).hasClass(‘myReserve’)) {
$(this).addClass(‘hoverFlag’);
}
}
},
‘mouseleave’: function() {
if(!$(‘#toggleCancelBtn’).prop(‘checked’)){
if ($(this).text() === “” && !$(this).hasClass(‘rsvFlag’)) {
$(this).removeClass(‘hoverFlag’);
}
}else{
if ($(this).hasClass(‘myReserve’)) {
$(this).removeClass(‘hoverFlag’);
}
}
},
},”td”);

array_filter

//array_filterは、フィルタリングする条件を関数で記載する。
//評価式に変数を使えないので、useで渡す。
$filtered_array = array_filter($items, function($row) use ($s_date){
return($row[‘date’] == $s_date);
});

Posted in php

Laravel モデルの使い方

モデルの存在を忘れていた。

artisanでモデルのファイルを作成する。
/usr/local/php7.1/bin/php artisan make:model Reserve
ファイル名はテーブル名称と同じにする。(単数形にする。テーブル名称がReservesの場合は、モデルの名前はReserve)

モデルがあるだけで、コントローラーでは、モデル名称でデータベースを触ることができる。

use App\Reserve;
これを書いて。
$items = Reserve::all();
これで取れる。

$exist = Reserve::where(‘date’, $ite[0])->value($ite[1]);
こんな感じでコントローラーに書く。
モデルに書くほうがいいのかな。わからない。

laravel レイアウト

sectionとyeildは対になっている。
テンプレート側で、yieldを入れておくと、実体側のsectionを読み込む。

テンプレートの読み込みはextendで行う。
@extends(‘layouts.common’)
viewsフォルダの下のlayoutsフォルダの中のcommon.blade.phpを継承する。

ーー
実体=viewsの中のBladeファイル
テンプレート=Layoutsフォルダを作って配置

置く場所が違う(別の場所に置いている)だけで、テンプレートと実体のファイルは同じ「Blade」ファイルです。
1.routesでviewsのファイルを指定するとそれを表示させるようにする。
2.viewファイルに、extendが記載されていたらそのファイルを取りに行く。
3.テンプレートファイルに、yieldが設定されている場合、yieldに設定されているcontentをviewファイルから探す。パーツがテンプレートを取りに行くイメージ。取得したテンプレートに自分のパーツをはめ込む。

ーー
Bladeのコメントは、{{– コメントの内容 –}}と記述しよう。

ーー
@include(‘layouts.header’)
インクルードする場合の、相対パスはどこから見たアドレスになるのだろう?
おそらく、routesで見にいったファイルから見たアドレスになるのではないかと思う。

 

ーー

cssやjsなど、ページごとにlinkするファイルを指定したい場合。
@stack(‘sakajs’)と@push(‘sakajs’)・・・@endpushを使う。

@stackをheaderなど共通部分が書いてある、common.bladeなどに記載する。
@pushをそれぞれのページのbladeに記載する。

@push・・・@endpushに記載されている内容が、@stackに記載されているものとして解釈される。

おそらく@pushと@stackは一対多になっているのだと思う。

 

ーー

レイアウトで、URLによる判定を行いたい場合。

@if(!Request::is(‘admin’))
 @include(‘layouts.header’)
@endif

Request::is(‘admin’) これで判定が返る。

@if(Request::is(‘/’)) トップページの判定はこれ。
@if(!Request::is(‘*login’)) isはLike検索を行なっているようなのでワイルドカードが使える。

Laravel 認証

ユーザー名とパスワードでログイン
LoginController.phpを編集する

public function username()
{
return ‘name’;
}

この関数を追加して、フォームのnameをname(データベースのカラム名)にする

Seederでダミーデータを入れる

LaravelのSeederを使う。

make:seederでシーターのファイルを作成して、データベースにinsertする記述を行う。
composer で dump-autoloadをして、DataBaseSeeder.phpに登録を行って、実行をするのだけどうまく動かない。

クラスがdose not exit.です。

composerを使う

ロリポップでコンポーザーを使う。
PHPにパスを通すことができないので、PHPの場所を指定して使う。

$ /usr/local/php7.1/bin/php composer.phar dump-autoload

composerではなく、composer.pharなのがなぜか?

Laravelで新しいクラスを作った時に、dump-autoloadしないといけないのだけど、だいぶ苦戦する。面倒。
dump-autoloadは、パスを通すようなことをしているのだと思う。

composer.jsonに、新しく作ったクラスファイルを置いているファイルのパスを追記する。
{
“require”: {
“google/apiclient”: “^2.0”
},
“autoload”: {
“classmap”: [“kobeu/kcs/app/Libs”]
}
}
requireは最初から書いてあった。autoloadを追記した。
classmapというのは、名前空間?みたいなもの。他の書き方もあって、それぞれメリットがあるようです。この辺りはおそらく深い。
config/app.phpにも、追記が必要。エイリアスaliasの設定も必要。

‘Common’ => App\Libs::class

これを追記した。
追加したクラスは、インスタンス化してから使う。下みたいに。

$common = new Common();
$string = $common->h($string);