- 投稿日:2021-01-19T23:02:54+09:00
プログラムを少しかじった私がバックエンドエンジニアとして働くためにECサイトを作り始めてみた その⑥
対象者
・バックエンドエンジニアを志す人
・web開発初学者
・ECサイトを作成しようと思っている人
・初学者の勉強仮定を見たい方はじめに
こんにちは!
この投稿はその⑤の続きです。今週は別プロダクトの発表が週末にあります!
前置きは短めに!目次です!目次
1.今回の作業報告
画像を使ってざっくり報告
◯商品の表示機能
商品一覧(全部)と男性向け商品と女性向け商品を一覧で表示させる仕様で実装しています。
DBに男性向けと女性向けの識別するカラムをテーブルに入れて判定させました。
ご注文確認画面へ。
カートの情報と送信先が表示されるようにしています。
その他、ユーザー毎のログイン機能など他にも実装しましたが割愛します。
2.反省点
実装の仕様がちゃんと決まっていないために大幅に時間が取られてしまいました。
数量が増えたときどうするかなどの仕様はあらかじめ決める必要がありそうです。
テーブル結合などもうちょっと踏み込んで実装できれば色々表現できる幅が広がりそうです。3.次のステップ
カート内の商品計算とかその他もろもろを引き続き実装していきます。簡単ですが今回は以上です。
- 投稿日:2021-01-19T22:54:48+09:00
【Laravel6】セッションの値が多重連想配列の時に特定のkeyに対応するvalueを更新する方法
はじめに
あまりググっても出てこなかった方法なので、残しておきます。
この選択肢があればセッションの扱える幅が広がると思います。対象のセッション(仮)
例えば
//セッションからkeyが'cartData'の値を取得 $request->session()->get('cartData');これで取得した値が以下の場合を想定する
[ [0] => [ 'item_name' => 'ジャケット', 'item_count' => 1, ], [1] => [ 'item_name' => '靴下', 'item_count' => 3, ], [2] => [ 'item_name' => 'バッグ', 'item_count' => 2, ], ]実現したいこと
靴下の個数を3 → 5個にしたい!
セッションの特定のkeyに対応するvalueを更新する方法
以下のコードで更新できる
$request->session()->put('cartData.1.item_count', 5);
->put()
の第1引数に連想配列の階層を文字列連結することで特定のkeyのvalueにアクセスすることができる。※
config()
と同じ感じですねさいごに
ドキュメントにも明確には記載されていなかった...
- 投稿日:2021-01-19T22:46:45+09:00
wordpress を使ってエンジニアポートフォリオ作成
Wordpressを使ってエンジニアポートフォリオを作成
以下のサイトからテーマを取得
https://webdesign-trends.net/entry/11500
DEMOサイト
https://demos.pixelgrade.com/noah-lite/about/Topページの作成
SmartSlider3
メニューバー
Slider
問い合わせフォームを作成
https://www.xserver.ne.jp/blog/contact-form/
多言語対応
SEO対策
ポートフォリオでは特にSEO対策する予定はないが
今後ブログ作成など行うので書く予定まとめ
作成完了したらまたいろいろ書く
- 投稿日:2021-01-19T22:19:35+09:00
谷藤賢一『いきなりはじめるPHPワクワク・ドキドキの入門教室』でPHPを勉強してみた(2)
以下の内容を学習。
chapter3-9 アンケート項目を増やそう!
chapter3-10 前ページに戻る機能をつけよう!
chapter3-11 入力データを消さないでページを戻る方法!【やらかしたミス】
入力フォームに文字を記載して送信しても、ブラウザにプログラムが表示された。【原因】
ファイル「index.html」をダブルクリックしたせい。アドレスバーに「http://localhost/phpkiso/~」を入力すればいい。
あと、MANPを起動するのを忘れていた。HTML/CSSで作ったホームページはローカル環境でも確認できるのに、PHPはわざわざサーバーを起動させないと動かないのはなんでなんだ?
- 投稿日:2021-01-19T22:10:42+09:00
連想配列の最初のキーを取得するためにarray_key_first()を使おうと思ったらphp7から追加された要素で使えなかったから、php5でも使える方法にしてみた
どうも、7noteです。array_key_first()と同じことをphp5でもする。
連想配列の1番目かどうかを判断させるのに、
array_key_first()
が使えます。
しかし、これはphp7から追加されたものになるのでそれ以前のphpの環境では使えません。なので、php5以前でも同じような処理ができる方法を解説。
php7.xなら
array_key_first()
が使えるが・・・**php5.xで同じことをするならこんな方法がある
$city = array('東京'=>'tokyo', '愛知'=>'aichi', '大阪'=>'osaka'); reset($city); $first_key = key($city); foreach($city as $key => $value) { if($key === $first_key){ // 最初の処理 } else { // それ以外の時の処理 } }おまけ
array_key_first()の使い方
php7以降なら
array_key_first()
で連想配列の最初のkeyを取得可能。// php7.x $city = array('東京'=>'tokyo', '愛知'=>'aichi', '大阪'=>'osaka'); foreach($city as $key => $value) { if($key === array_key_first($city)){ // 最初の処理 } else { // それ以外の時の処理 } }まとめ
phpはバージョンによって使える関数が違うことがあるので、よく使うものは代替策の書き方を知っておくと便利!
おそまつ!
~ Qiitaで毎日投稿中!! ~
【初心者向け】WEB制作のちょいテク詰め合わせ
- 投稿日:2021-01-19T19:05:39+09:00
PHPの基礎アウトプット
PHPの勉強を始めたのでこの場を借りてアウトプットしていきたいと思います。
①PHPはHTMLに埋め込んで使用することができる
<?php echo '<h2>テスト</h2>'; ?>とHTMLに記載するとHTMLには下記に変換されます
<h2>テスト</h2>このようにPHPは?phpを使用することによってHTMLに埋め込むことができます。
RubyでいところのERBのようなイメージで認識しています。また、上記にもありますがechoで出力をすることができます。
echoの後に半角スペースが必要であることに注意が必要です。②変数と四則演算の省略形
PHPの変数には先頭に $ が必要です。
また、
$A = $A + 1
は $A += 1
と記載します。以上、アウトプットでした。
- 投稿日:2021-01-19T17:53:57+09:00
【Laravel】artisanコマンドでやりたいこと、ここで見つかる
はじめに
「この記事を見ればお目当てのartisanコマンドが(だいたい)全て見つかる!」っていう記事です。
以前書いたGitでやりたいこと、ここで見つかるのartisanコマンドバージョンです。
僕自身が「あのartisanコマンドどう書くんだっけ?」ってなった時に見返す用でもありますのでストックしておくと便利かなと思いますw
※この記事では全てのartisanコマンドを網羅したわけではありません。
.envのAPP_ENVを表示
$ php artisan envLaravelの内蔵サーバーを起動(PHPのビルドインサーバー)
$ php artisan serveDBとの接続状況を確認
$ php artisan migrate:statusコントローラー作成
$ php artisan make:controller {任意の名前}Controllerコントローラー作成(主要7アクションを自動的に生成)
$ php artisan make:controller {任意の名前}Controller --resourceシングルアクションコントローラー作成
$ php artisan make:controller {任意の名前}Controller --invokableマイグレーションファイル作成(テーブル作成用)
$ php artisan make:migration create_{テーブル名}_table —-create={テーブル名}マイグレーションファイル作成(カラム追加用)
$ php artisan make:migration add_column_{テーブル名}_table —-table={テーブル名}※ファイル名の付け方には個人差あり
※これがデファクトスタンダードではないマイグレーション実行
$ php artisan migrate現在のテーブルを全削除してマイグレーションやり直し
$ php artisan migrate:freshデータベース全体を作り直す
$ php artisan migrate:refreshマイグレーション実行&シーディング実行
$ php artisan migrate --seedマイグレーションロールバック(最後に実行したマイグレーションを元に戻す)
$ php artisan migrate:rollback全てのマイグレーションをロールバックする
$ php artisan migrate:resetシーダーファイル作成
$ php artisan make:seeder {任意の名前}Seeder※
{任意の名前}TableSeeder
にする場合もアリシーディング実行
$ php artisan db:seed特定のシーダーファイルを実行
$ php artisan db:seed --class={実行するシーダーファイル}モデル作成
$ php artisan make:model {任意の名前}(例)テーブル名が
users
なら{任意の名前}はUser
にするモデルとファクトリーを同時に作る
$ php artisan make:model {任意の名前} —-factory(例)テーブル名が
users
なら{任意の名前}はUser
にするルーティング一覧を表示
$ php artisan route:listフォームリクエスト作成(バリデーションに使用)
$ php artisan make:request {任意の名前}Requestポリシー作成
$ php artisan make:policy {任意の名前}Policy --model=Article通知クラス作成
$ php artisan make:notification {任意の名前}Notificationファクトリー作成(モデルと対応させる)
$ php artisan make:factory {モデル名}Factory —-model={モデル名}テスト作成
$ php artisan make:test {任意の名前}ControllerTesttinker起動
$ php artisan tinkerさいごに
順次追記予定です
- 投稿日:2021-01-19T14:31:33+09:00
PHP Portfolio
はじめに
らむです。
今回は、初めてQiitaで投稿します。
理由としては、ある程度、学習をしたのでポートフォリオを制作することにしました。目的
私は、現在転職するために独学で、プログラミングを勉強しています。
また、転職活動において他人と差別化できるように作成中のポートフォリオの説明や工夫点などをアウトプットしていきます。開発環境
■言語(製作中の現時点)
PHP 7.4.2
mysql Ver 8.0.22
JavaScript (jQuery)
HTML
CSS■ローカル開発
MAMPポートフォリオ概要
・機能
ログイン機能、カレンダー、ToDoList
・細かな機能
ユーザー登録、ログイン、ログアウト
カレンダーの一般的な機能
日にち選択時にモーダルウィンドウ(予定入力欄)表示■今後実装予定
入力した予定の保存、更新、削除機能
予定一覧に「成功」、「失敗」欄を追加し、選択により画面が変わる
その日の予定の進捗を0時前に表示させ○%以上成功したら、○%以下しか成功できなかったらとそれぞれ表示詳細
■ターゲット
13歳以上をメインターゲット■ターゲット選定理由
13歳になると中学生になります。中学生になれば、自分で予定を組んだりしていく事が多いと思います。
12歳未満は主に保護者が予定を管理していると考えています。■開発した理由
現職で工程管理、マネジメント業務を行っており、毎日予定を立て、業務をしています。
その中で、その日に計画した全ての予定を終わらせ、毎日こなしていくことは大変だと感じています。
なので、少しでもモチベーションを上げれるように考え方を変え、ミッション風にアレンジしようと思い具現化する為に実装しました。■工夫点
一般的なスケジュール管理をゲーム感覚でできるように付加価値を与えた点。
13歳以上をメインターゲットにしているので、全てにおいてシンプルに制作しています。
引き続きポートフォリオ制作がんばります!
- 投稿日:2021-01-19T14:14:44+09:00
【Laravel】動的に生成した文字列を直接ファイル形式でレスポンスする方法。
自分用のメモとして残します。
文字列をダウンロードファイルとしてレスポンスを返す方法をメモ。
→つまりレスポンス用にわざわざファイルを保存しない。■やり方
\Responseクラスでレスポンス用のオブジェクトを明示的に作成する。
$content = 'hoge,hoge,hoge'; $headers = [ 'Content-type' => 'text/plain; charset=utf-8', 'Content-Disposition' => 'attachment; filename="download.txt"', ]; $response = \Response::make($content, 200, $headers); return $response;
- 投稿日:2021-01-19T14:03:36+09:00
PHPで書くWordPressループ処理の基本と、件数やカテゴリーなどを指定する方法
WordPressの更新システムを組み込んだwebサイトの作成、「記事一覧」「実績一覧」「メニュー・料金一覧」「よくある質問一覧」などなど、ループ処理で一覧表示をさせることが多いかと思います。
ループ処理の基本的な書き方と、カテゴリーや件数での条件を指定した書き方をまとめましたループ処理の基本的な書き方
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <!-- 記事のループ処理 --> <?php endwhile; ?> <?php else : ?> <!-- 記事が無い場合 --> <?php endif; ?>ループ処理の中身の一例
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <span><?php the_time('Y/m/d'); ?></span> <?php endwhile; ?> <?php else : ?> <p>記事がありません</p> <?php endif; ?>この書き方では以下のようになります
記事がある場合
- タイトルをaタグで囲んで表示、リンクは投稿先へ
- spanタグで日付を年/月/日で表示
- この処理を記事がある分だけ繰り返す
- ループ終わり
記事が無い場合
- 「記事がありません」という文字列をpタグで囲んで表示
- ループ終わり
更に最初に少し書き加えると、条件を指定した表示ができます。
カテゴリーを指定
'cat=○○'この部分に表示させたいカテゴリのIDを入れる
<?php query_posts('cat=1'); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <!-- 記事のループ処理 --> <?php endwhile; ?> <?php else : ?> <!-- 記事が無い場合 --> <?php endif; ?>複数のカテゴリを指定する場合はカンマで区切る
<?php query_posts('cat=1,3,5'); ?>指定のカテゴリを表示しない場合
<?php query_posts('cat=-1'); ?>表示数を指定
'posts_per_page=〇〇'この部分に表示数を入れる
<?php query_posts('posts_per_page=10'); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <!-- 記事のループ処理 --> <?php endwhile; ?> <?php else : ?> <!-- 記事が無い場合 --> <?php endif; ?>指定のカテゴリの表示数を指定
<?php query_posts('cat=1&posts_per_page=10'); ?>まとめ
規模の小さいコーポレートサイトやブログの更新システムは、この書き方で十分まかなえるかと思います。
- 投稿日:2021-01-19T12:09:31+09:00
【Laravel】.envファイルの値を確認する方法。env関数の使い方と注意点。
Laravelで.envファイルに記述した値が反映されているのか確認する方法について。
envヘルパ関数
Laravelにデフォルトで用意されている関数。.envファイルの指定した値を呼び出せる。
・
env('環境変数名', 'デフォルト値')
- 環境変数がnullの場合にデフォルト値が表示される。
- デフォルト値はなくてもいい。
値がきちんと読み込まれているか確認するにはデフォルト値を設定しておく方がわかりやすい。
▼記述例
env('DB_CONNECTION') env('DB_CONNECTION', 'default')
確認手順
実際にブラウザに表示してみる。
1. ビューの作成
rousources > views > env.blade.php
テストとして、DBに関する3つの環境変数を表示してみる。
env.blade.php<p>{{ env('DB_CONNECTION', 'default')}}</p> <p>{{ env('DB_HOST', 'default')}}</p> <p>{{ env('DB_PORT', 'default') }}</p>
▼(補足)対象のデータ.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=33062. ルーティング
routes > web.php
web.php//env Route::get('env', function () { return view('env'); });3. ブラウザに表示
ターミナル#サーバー起動 php artisan servehttp://127.0.0.1:8000/env にアクセス
環境変数の値が読み込まれていることが確認できた。
表示されない場合の対処法
キャッシュが読み込まれてしまい、.envファイルが読み込まれない場合がある。
以下コマンドでキャッシュをクリアする。
・
$ php artisan config:clear
↓
ターミナル$ php artisan config:clear Configuration cache cleared!↓
ローカル環境で実行してはいけないコマンド
php artisan config:cache
を実行すると、.env
ファイルを読み込みに行かなくなる。すべての値が.envがきちんと記述されているのに、ブラウザの表示がnull(上記設定ではdefault)になる場合は、このコマンドが実行された可能性がある。
php artisan config:cache
とは?本番環境用のコマンドで、すべての設定ファイルを一つにまとめることで高速化するためのコマンド。
設定が頻繁に変わる開発環境では推奨されていない。
また、実行すると、キャッシュが作成され、.envファイルを読み込みに行かなくなる点も注意が必要。
$ php artisan config:cache Configuration cache cleared!
- 投稿日:2021-01-19T10:48:38+09:00
PHP 配列が空かどうかを判定する
目的
- PHPで配列が空かどうか判定する方法をメモ的にまとめる
情報
- 下記サービスを用いて本記事の内容を検証した。
方法
- empty()関数を用いて配列が空かどうかを判定する。empty()関数は空の場合trueを返す。
- 「当該変数に配列が格納されており、かつ、その配列が空」であることをチェックしたいためempty()関数だけではなくis_array()関数も一緒に使用する。
下記を実行すると変数
$array
には空の配列が格納されているため「Empty data」の文字列が出力される。<?php $array = []; if (is_array($array) && empty($array)) { echo 'Empty data'; }参考文献
- 投稿日:2021-01-19T10:39:32+09:00
lcobucci/jwt 4系でZoom API用トークン作成 (Claimの日付系フォーマットを変える)
[PHP] Zoom APIを利用してミーティングを作成するで、Zoom APIを利用してミーティングを作成する方法が詳しく記載されていますが、lcobucci/jwtの4系ではZoom API用のJWTトークンの作成方法が変わっています。
4系でのトークン作成について簡単に説明します。TL;DR
lcobucci/jwt4系は、デフォルトのClaimFormatterが日付系をマイクロ秒ありUnixタイムスタンプにフォーマットするので、Zoom APIが401を返してくる。日付をマイクロ秒なしUNIXタイムスタンプにフォーマットしてトークン作成することで正常にZoom APIにアクセスできる。
lobucci/jwtインストール
composer require lobucci/jwtトークン作成
Configurationインスタンスを作る
3系ではBuilderを使ってトークン作成していましたが、4系ではまずConfigurationインスタンスを作成します。
use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Key\InMemory; $apiSecret = '[ZOOM API SECRET]'; $configuration = Configuration::forSymmetricSigner( new Sha256(), // 暗号化ハッシュ関数 InMemory::plainText($apiSecret) // キー );Zoomは、HMAC SHA256を利用しているので、ハッシュ関数には
Lcobucci\JWT\Signer\Hmac\Sha256
を、キーはZoom API管理画面から平文で取得できるのでLcobucci\JWT\Signer\Key\InMemory::plainText()
でセットします。Builderからトークン作成、そして失敗
トークン作成用のBuilderは
$configuration->builder()
で取得できるので、これを利用します。※このコードでは動作しません!!!
$apiKey = '[ZOOM API KEY]'; $now = new \DateTimeImmutable(); $token = $configuration->builder() ->issuedBy($apiKey) ->issuedAt($now) ->expiresAt($now->modify('+1 hour')) ->getToken($configuration->signer(), $configuration->signingKey());作成日時や有効期限といった日付系はUNIXタイムから
DateTimeImmutable
型に変更になっています。
Builderのそれぞれのメソッドに渡す値につぃては以下の通りです。
メソッド名 引数 issuedBy APIキー issuedAt トークン作成日 expiredAt 有効期限 値をセットして、
getToken($configuration->signer(), $configuration->signingKey())
でトークンを作成しますが、このトークンではZoom APIにアクセスしても401 Unauthorizedが返ってきます。作成したトークンでAPIにアクセスできない原因は日付系フォーマット
4系のBuilderで生成されたトークンのClaim部分とZoom APIの管理画面から生成した値を比べてみました。
Zoom管理画面から生成したClaim部分{ "aud": null, "iss": "APIキー", "exp": 1610972172, "iat": 1610966772 }4系lcobucci/jwtで生成したClaim部分{ "iss": "APIキー", "iat": "1611019091.181495", "exp": "1611022691.181495" }4系では、日付系のフォーマットにマイクロ秒が付随しているのに対し、Zoom管理画面から生成したものにはマイクロ秒が付随していません。(audはなくても問題なし)
lcobucci/jwtのコードを追ってみると...
ChainedFormatter.phppublic static function default(): self { return new self(new UnifyAudience(), new MicrosecondBasedDateConversion()); // <- ここ }MicrosecondBasedDateConversionprivate function convertDate(DateTimeImmutable $date) { $seconds = $date->format('U'); $microseconds = $date->format('u'); if ((int) $microseconds === 0) { return (int) $seconds; } return $seconds . '.' . $microseconds; // <- ここ }というようになっています。lcobucci/jwtでは
Lcobucci\JWT\ClaimsFormatte
インターフェイスを実装したフォーマッタークラスがあり、これを利用してClaimをフォーマットしていますが、デフォルトでは日付はマイクロ秒つきのUnixタイムスタンプになるフォーマッターが使われてしまいます。これが原因でした。日付をマイクロ秒なしUNIXタイムスタンプにフォーマットしてトークン作成する
マイクロ秒なしUNIXタイムスタンプ用のフォーマッターを作る
まず、マイクロ秒なしにするためには独自のフォーマッターを作ります。
UnixTimestampFormatter.php<?php use Lcobucci\JWT\ClaimsFormatter; use Lcobucci\JWT\Token\RegisteredClaims; class UnixTimestampFormatter implements ClaimsFormatter { /** @inheritdoc */ public function formatClaims(array $claims): array { foreach (RegisteredClaims::DATE_CLAIMS as $claim) { if (! array_key_exists($claim, $claims)) { continue; } assert($claims[$claim] instanceof \DateTimeImmutable); $claims[$claim] = $claims[$claim]->getTimestamp(); } return $claims; } }独自フォーマッターを使ってトークンを作成する
作成したフォーマッターは
$configuration->builder()
に引数で渡せます。独自フォーマッターを渡せば、あとは前述の通りでZoom APIにアクセスすることができるトークンを作成できます。Configurationインスタンス作成を含めた、一連のコードは以下の通りです。use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Key\InMemory; use UnixTimestampFormatter; $apiKey = '[ZOOM API KEY]'; $apiSecret = '[ZOOM API SECRET]'; $now = new \DateTimeImmutable(); // Configurationインスタンス作成 $configuration = Configuration::forSymmetricSigner( new Sha256(), // 暗号化ハッシュ関数 InMemory::plainText($apiSecret) // キー ); // トークン作成 $token = $configuration->builder(new UnixTimestampFormatter()) ->issuedBy($apiKey) ->issuedAt($now) ->expiresAt($now->modify('+1 hour')) ->getToken($configuration->signer(), $configuration->signingKey());トークン作成後は、[PHP] Zoom APIを利用してミーティングを作成すると同様です。
- 投稿日:2021-01-19T06:37:55+09:00
Xdebugをextensionで設定してPHPブレイクポイントが動作しなかった件
IIS・PHP環境を作り、その環境でローカルでデバッグしようとしたらブレイクポイントが動作せず、コードのエラーがあった場合はデバッガーが動作するという状態になり、散々あれこれ悩んで調べたりした結果、php.iniのDLL読み込みの記述に誤りがあっただけでした。
間違い。
extension=php_xdebug-2.9.8-7.3-vc15-nts-x86_64.dllzend_extensionで指定する。
zend_extension=php_xdebug-2.9.8-7.3-vc15-nts-x86_64.dllphpinfoでXdebug表示されてたし、エラー時に止まったのでphp.iniは問題ないだろうと思って、pathMappings?とか色々いぢってました。(/・ω・)/
- 投稿日:2021-01-19T06:27:34+09:00
Laravel/UIでの簡単ログイン機能の実装
準備
Laravel/uiをインストールしてとりあえず基本のログイン機能が使えることを確認しておく。
※php8では使えません。前提
セキリュティへの考慮はしていません。
ポートフォリオを作る際にできたらいいなと思ったので書いています。
コードを書くのには慣れていないので、あくまで参考程度でお願いします。実装
Laravel/UIの処理が全部はわかりませんが、インストールの際に
views/auth
にlogin.blade.php
が作成されています。
この中を見てみるとlogin.blade.php<form action="{{ route('login') }}" method="POST"> ... </form>と書かれており、このrouteに渡してあげればいいみたいです。
login.blade.php<form method="POST" action="{{ route('login') }}"> @csrf //この記述がないとセッションエラーが起きる <button type="submit" >{{ __('Guest Login') }}</button> <input type="hidden" name="email" value="..."> <input type="hidden" name="password" value="..."> </form> //valueには自分が作成したいユーザの値をいれる。次にlogin.blade.phpの表示を命令している部分が、少しややこしいですが、
vendor/laravel/ui/auth-backend/AuthenicatesUsers.php
内にありました。AuthenicatesUsers.phppublic function showLoginForm() { return view('auth.login', compact('test')); } //ここが該当部分です。そこでDBにゲストで使いたいユーザが登録されている場合にtrueを返し簡単ログインできるようにしたいと思います。
AuthenicatesUsers.phppublic function showLoginForm() { if(User::where('email','LIKE', '...')->get() != '[]'){ $test = true; }else{ $test = false; } //if文で ... != '[]'としているのはsqlを発行した際、見つからない場合の返り値が'[]'のため return view('auth.login', compact('test')); }そしてlogin.blade.phpで$testを読み取ればできる。
login.blade.php@if($test == true) <form method="POST" action="{{ route('login') }}"> @csrf <button type="submit" class="btn btn-primary">{{ __('Guest Login') }}</button> <input type="hidden" name="email" value="test@test.com"> <input type="hidden" name="password" value="password"> </form> @endifとりあえずこれで簡単ログインができる。
しかし、最初からゲストユーザはDBに無くエラーが出るので、DBに無い場合はregisterに渡して登録させればいい。login.blade.php@if($test == true) <form method="POST" action="{{ route('login') }}"> @csrf <button type="submit" class="btn btn-primary">{{ __('Guest Login') }}</button> <input type="hidden" name="email" value="test@test.com"> <input type="hidden" name="password" value="password"> </form> @else <form method="POST" action="{{ route('register') }}"> @csrf <button type="submit" class="btn btn-primary">{{ __('Guest Login') }}</button> <input type="hidden" name="name" value="test"> <input type="hidden" name="email" value="test@test.com"> <input type="hidden" name="password" value="password"> <input type="hidden" name="password_confirmation" value="password"> </form> @endifこれで簡単ログインが実装できた。
注意
本番では100%使いません。
ポートフォリオで見てもらう人の負担を減らすみたいな用途くらいかな?
再度、コードを書くのには慣れていないためよくない書き方をしているかもしれません。もしこうした方がいいよ!などありましたら是非教えていただきたいです。