- 1. Laravelを使ってユーザー認証機能を「本気で」実装してみる①
- 2. ABC249にPHPで参戦(ABC挑戦1回目)
- 3. laravelマイグレーションで複数カラムのunique制約を削除する方法
- 4. スコープ演算子(::) アロー演算子(->) PHP
- 5. クラスを扱うときに気をつけること
- 6. Monterey付属のhttpdで、phpのバージョンを仮想ホストごとに設定する
- 7. 【検証】PHPのrequireにスコープ?
- 8. PHPでフレームワークを使わずに、掲示板アプリを作ってみる①DB設計編
- 9. 【php】tips
- 10. 【php】配列操作基礎
- 11. Laravel MVCの仕組みとWEB3層構造
- 12. テキストエディタの違い(シンタックスハイライト)
- 13. 【php】文字列操作基礎
- 14. XAMPPでPHPのバージョンを複数持つ
- 15. 【PHPUnit】テストデータ作成時はFakerを積極的に使おう
- 16. 【socialite】Googleログインのモックを使ったテスト
- 17. 【Laravel】assertDatabaseHasで複数データを一気にテストしたい
- 18. Laravel8 jQuery 画像動的表示
- 19. CentOS Stream8にNginx、PHPをインストールする
- 20. クラスとインスタンス PHP
Laravelを使ってユーザー認証機能を「本気で」実装してみる①
本稿では、Laravel 6系を使ってユーザー認証機能を実装する方法を解説します。
タイトルに **「本気で」** とある通り、ただコマンドを打って「はい、出来ました~」ではなく、きちんと実際のアプリケーションとして運用できるようなクオリティを目指して実装します。詳しくは、要件定義の項目をご確認ください。# 要件定義
### 開発環境
– LAMP環境(筆者はDockerを使用)
– PHP 7.4
– Laravel 6
– MySQL 5.7
– Node.js 12
– DB接続クライアント:phpMyAdmin
– メール送信テスト:MailCatcher### 実装する項目
– ユーザー認証機能(新規登録/ログイン・ログアウト)
– ダミーデータの挿入
– メール認証機能
– パスワードリセット機能
– ログインなしでアクセスした場合のリダイレクト先のカスタマイズ
– 画面、及びメールの日本語化
– パスワード設定時に独自バリデーションを追加(半角英字(小文字)、半角英字(大文字)、半角数字を1文字以上含む8文字以上)# 本編
ABC249にPHPで参戦(ABC挑戦1回目)
# 私のこと
PHP実務歴1年半
とは言え職場柄PHPを長くやってきた先輩がいたわけでもないので独学みたいなもん
実務で触ってる言語がPHPとJavaScriptくらいなものなので悩んだ末PHPで挑むことにした# ABSの記録
そもそもAtCoderやり始めたのが[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067)を見てからなので若干ネタバレくらった状態でした。それでもOtoshidamaとTravelingは一旦投げ捨てました。先週は予定があって出られず先々週はエントリーしたくせに寝落ちしてたため、ABSやってからちょっと間の空いてからの挑戦でした。
# 結果
5541位
合計(誤答) 300(5)
時間88:18
A:AC(1)26:52
B:AC(4)63:18
C:WA(2)## A : [Jogging](https://atcoder.jp/contests/abc249/tasks/abc249_a)
“
laravelマイグレーションで複数カラムのunique制約を削除する方法
## 課題
laravelのマイグレーション実行時、複数カラムのunique制約を削除する際、以下のようなエラーが発生して正しく削除されない事があります。
“`php
SQLSTATE[HY000]: General error: 1553 Cannot drop index ‘identity_providers_user_id_provider_name_unique’:needed in a foreign key constraint (SQL: alter table `table_name` drop index `identity_providers_user_id_provider_name_unique`)
“`unique制約を削除したい対象が外部キー制約も適用されている場合、外部キー制約を先に削除する必要があります。
## 解決方法
先に外部キー制約を削除してからunique制約を削除するようにします。
例えば、以下ようなケースの場合、マイグレーションはこのように記述します。
– identity_providersテーブルにuser_id,
スコープ演算子(::) アロー演算子(->) PHP
## スコープ演算子(::)
インスタンス化していない状態でプロパティ(変数)やメソッド(関数)にアクセスしたいときに使う。
“`php:クラス外からアクセスする際の例
“`
※クラス外からアクセスする場合は
`クラス名::アクセスしたいプロパティ(変数)やメソッド(関数);`
※クラス内からアクセスす
クラスを扱うときに気をつけること
スクレイピングとは「データの整形や抽出を行うデータスクレイピング」
—
php
クラスの継承はひとつしかできない—
クラスをインスタンス化する時、変数名とクラス名は一緒にしないほうがいい。
(例)$display5 = new display5;require_onceは絶対パスでの指定が望ましいかも
-todoapp_list.php
-class
-DB
-dbc.php
-listpage
-display5.php上記のフォルダ構成の時、dbc.phpを読み込んでいるdisplay5.phpをtodoapp_list.phpに読み込みたい時、display5.phpのrequire_onceでは__DIR__. ‘/../DB/dbc.php’のようにパス指定する
Monterey付属のhttpdで、phpのバージョンを仮想ホストごとに設定する
## ことの発端
これまでwindowsのIIS上で、仮想ホストごとに違うバージョンのphpを動かしていました。開発マシンをmacにしたので、こちらでも同じことができないか調べてみました。Montereyはphpが同梱されていないのでbrewで入れることになりますが、brewで入れたphpには署名がされていないためか、付属のhttpdにphpモジュールを組み込むところで弾かれてしまいます。
そこでメモリに組み込むモジュールではなく、TCP/IP経由で処理を投げるphp-fpmを使ってみることにしました。あちこち参考にさせて頂き試したところ、下記の方法でできたので記録として残したいと思います。
## php-fpmの設定
brewで入れたphpにはphp実行サーバとでも言うべきphp-fpmが同梱されており、例えば
brew install php@7.4
で入れた場合、brew services start php@7.4 (停止はstop)
のコマンドで7.4のphp-fpmがポート9000で起動されます。ちなみに9000は昔はxdebugのデフォルトポートだったので、よ
【検証】PHPのrequireにスコープ?
こちらの記事でrequireについて検証しました。
https://qiita.com/4U5zo/items/7ee8114a94d7d410037a
その際コメントでrequireにもスコープがあって必ずしも一度宣言すればよいわけではないとご指摘を頂きました。ご指摘いただけると学習になるので本当に助かります!!
今回は続編としてrequireのスコープについて検証します。いきなりですが公式ドキュメントの文章を引用します。
>ファイルが読み込まれるとそのファイルに含まれるコードは、 includeもしくはrequireが実行された 行の変数スコープを継承します。 呼び出し側の行で利用可能である全ての変数は、読み込まれたファイル内で利用可能です。 しかし、読み込まれたファイル内で定義されている関数やクラスはすべて グローバルスコープとなります。
https://www.php.net/manual/ja/function.include.php初見ではなかなか悩ましい文章でした。
実行された行のスコープを継承しますと言いつつグローバルスコープとなります??ってなりますが今回
PHPでフレームワークを使わずに、掲示板アプリを作ってみる①DB設計編
# はじめに
※自身の学習を記事に投稿することでアウトプットするのが目的です。
「よくわかるPHPの教科書」のchapter6に書いてある通りにアプリを
作成していくので、私と同じような駆け出しエンジニアの皆さんは、
書籍を買ってアプリを作っていただいた方がわかりやすいかもしれません。# 使用しているエディタ、実行環境
* VS Code
* XAMPP* PHP7
* windows# DBを設計していく
### 必要な機能の洗い出し
掲示板アプリに必要な機能を洗い出していきます。
簡単なもので、思いつくところだと、こんな感じでしょうか。* 文章を投稿する機能
* 文章に返信できる機能
* 写真をアップロードできる機能
* 会員登録ができる機能
* 退会できる機能
* ログインできる機能
* ログアウトできる機能### 機能に対するデータベースの項目を考えてみる
大まかに、重複してもいいので考えてみます
- ・文章を投稿する機能
- メッセージ
- 会員情報
- ・文章に返信できる機
【php】tips
### 平方数の判定
与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうかを判定
“`PHP
function is_square($n)
{
$sqrt = floor(sqrt($n));
return ($sqrt*$sqrt == $n);
}
“`### 絶対値
“`PHP
abs(-1);
“`
“`PHP
1
“`
【php】配列操作基礎
# 配列
配列すべてはechoでは出力できない
“`PHP
$team = array(“勇者”, “魔法使い”);
print_r($team);
“`特定の要素のみを出力する場合はechoを用いる
“`PHP
echo $team[1];
“`
“`PHP
魔法使い
“`### 要素の追加
“`PHP
$team[] = “ドラゴン”;
print_r($team);
“`
“`PHP
Array (
[0] => 勇者
[1] => 魔法使い
[2] => ドラゴン
)
“`### 要素の削除(unset)
ただしunsetを用いた場合、その番号は歯抜けになる
“`PHP
unset($team[1]);
print_r($team);
“`
“`PHP
Array (
[0] => 勇者
[2] => ドラゴン
)
“`### 特定の文字で区切って配列に追加(explode)
“`
勇者,魔法使い,ドラゴン
“`
“`PHP
$input = trim(fgets(STDIN));
$array = explode(
Laravel MVCの仕組みとWEB3層構造
## MVCとは
* アプリケーションを実装するためのデザインパターン
* アプリケーションの役割を分ける### Model(データ処理)
データベースへのアクセス(登録・更新・削除・検索の実行)やデータの加工等々、
データにまつわる処理全般を請け負う。### View(ブラウザに表示される画面を作る)
Controllerから取得したデータをテンプレートを使ってブラウザに出力する。### Controller
画面からの入力値をModel層の処理機能へデータとして引き渡したり、
データベースから取得したデータを画面へ表示するためにView層へ渡したりと
ViewとModelの間を取り持つ。## WEB3層構造
* ブラウザ(クライアント)
* プレゼンテーション層(WEBサーバ)
* アプリケーション層(APサーバ)
* データベース層(DBサーバ)クライアントからの処理をするサーバがプレゼンテーション層・アプリケーション層・データベース層の3層から構成されているため、WEB3層構造という。
#### クライアント
利用者からの入力を受け付け、結果を出力する。
テキストエディタの違い(シンタックスハイライト)
テキストエディタでコーディングしていて、気になったことがあります。
# シンタックスハイライト
コードを書くときにどこまでシンタックスハイライトがつくかエディタによって違いがあるようです。
例1
“`php_sample1.php
【php】文字列操作基礎
### 複数行の入力
ヒアドキュメントと呼ばれる方法。EOMの目印が出てくるまで文字列を出力する
“`PHP
echo <<< EOM one two three EOM; ``` ### 小文字から大文字に変換 ```PHP echo strtoupper('hello world!'); ``` ```PHP HELLO WORLD! ``` ### 文字列の一部を取得 substr(string, 取り出し開始位置, length); ```PHP echo substr('abcde', 0, 2); ``` ```PHP ab ``` ### 配列の中の最大値・最小値を取り出す ```PHP $array = array(1, 2, 3, 4); echo max($array); echo min($array); ``` ```PHP 4 1 ``` ### 文字列の中の特定の要素の個数をカウント ```PHP echo substr_count("aAaAaA", "A"); ``` ```PHP 3 ``` ### 文字列の文字数をカウント ```PH
XAMPPでPHPのバージョンを複数持つ
XAMPPでPHPのバージョンを複数持つ方法を調べて試行錯誤した結果うまくいったので備忘録として残しておく。
# 準備
[XAMPPのサイト](https://www.apachefriends.org/jp/index.html)からポータブル版(exeではなくzipがいい)の欲しいPHPのバージョンが入っているデータを持ってくる。
今回は7.1と8.1で進めていく。# 実践
1. 持ってきたデータをどっちかひとつ解凍する。どっちでもいいがここでは便宜上7.1を解凍する。解凍したのはxamppを運用したい場所(C直下とか)に置く。ここでは便宜上Cドライブの直下に置く。2. 移動したxamppフォルダの中に「PHP」「Apache」「phpMyAdmin」というフォルダがあるので、それをそれぞれ「PHP71」「Apache71」「phpMyAdmin71」という名前にリネームする
3. 次に8.1を解凍する。その中にもやっぱり「PHP」「Apache」「phpMyAdmin」というフォルダがあるのでそれらをそれぞれ「PHP81」「Apache81」「phpMyAdmin81」
【PHPUnit】テストデータ作成時はFakerを積極的に使おう
## 環境
Laravel v9.5.1 (PHP v8.1.3)## テストデータを作成するとき
テストケースではパラメーターに入れる値などを直接入れないほうがいいらしい。
値を固定してしまうと本当の意味で正確なテストではなくなってしまう。## Bad
“`php
$this->users = User::factory(2)->create();
$params = [
‘user_id’ => $this->users[0]->id,
‘message’ => ‘メッセージです’,
‘points’ => 10,
];
“`
## Good
Fakerなどを使うとテストが実行されるごとにランダムな値でテストしてくれる。“`php
$this->users = User::factory(2)->create();
$params = [
‘user_id’ => $this->users[0]->id,
‘message’ => Str::random(10),
‘points’ => F
【socialite】Googleログインのモックを使ったテスト
## 環境
Laravel v9.5.1 (PHP v8.1.3)## socialiteを使ったモック
“`socialite“`でGoogleログインを実装したときのテストでモックを使用。
“`php
class OAuthTest extends TestCase
{
use RefreshDatabase;private function createSocialiteMock()
{
$user->shouldReceive(‘getEmail’)
->andReturn(Faker\Factory::create()->unique()->safeEmail)
->shouldReceive(‘getName’)
->andReturn(Faker\Factory::create()->name);$provider = Mockery::mock(‘Laravel\Socialite\Contracts\Provider’);
$provider->shoul
【Laravel】assertDatabaseHasで複数データを一気にテストしたい
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 状況
DBテストを書いていたら下記のエラー。
エラー文だけでググっても解決せず、少し苦労したので備忘録とする。“`
str_ends_with(): Argument #1 ($haystack) must be of type string, array given
“`
複数のデータが入っているかを一気にテストしたかったため、
配列の配列を第2引数としていた。
直感的にこう書けるかなと思ったがだめっぽい。“`php
$users = User::factory(2)->create();$this->assertDatabaseHas(‘post_histories’, [
‘user_id’ => $users[0]->id,
‘hoge_type’ => ‘hoge’,
], [
‘user_id’ => $users[1]->id,
‘hoge_type’ => ‘hoge’,
]);
“`
## 解決法DBテストではレコードごとにデータが入っているかを
Laravel8 jQuery 画像動的表示
## 初めに
この記事では、画像選択時にその場で選択した画像を表示させる方法をご紹介します![![Image from Gyazo](https://i.gyazo.com/58c381c1bc1418ab895dd66ad810b352.gif)](https://gyazo.com/58c381c1bc1418ab895dd66ad810b352)
## 実装
今回は以下のように実装してみました。
CSSはTailwindCSSを使用してます。・add.blade.php(画像選択のビュー)
“`php
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた