PHP関連のことを調べてみた2023年01月26日

PHP関連のことを調べてみた2023年01月26日

Laravel Fortify メールアドレス以外でログインする

Laravel Fortify でログイン方法をメールアドレスから別のカラムに変更したい人向け。
簡単2ステップで、終わりです。

### ①FortifyServiceProviderに追記する
FortifyServiceProviderのbootメソッドに下記の通り、追加

“`FortifyServiceProvider.php
public function boot()
{
Fortify::authenticateUsing(function (Request $request) {
$user = User::whereLoginId($request->login_id)->first();

if ($user &&
Hash::check($request->password, $staffMember->password)) {
return $user;
}
});
}

元記事を表示

Laravelを基本からまとめてみた【入門】

## Migration(PHPファイルでDBを管理)

– DBのテーブル定義は必ず『migration』で定義する!
– テーブル定義は後戻りができない
– 一度作ると後が超ラク

## Laravel/UI(シンプルデザインを生成)

– CSSとJSのテンプレート
– 誰でもデザインができ、初心者はベースに作ると良い
– 後から入れるとデザインが崩れる

## 固定データの取得先は『.env』から取る

– 『.env』は環境情報
– 開発用PCと本番サーバーなど、データの出し分け
– 直接PHPファイルに値を書くと後で大変になる

##### 環境に依存する情報・機密情報は『.env』で管理

## 初心者が気にしなくて良い機能と設定3選

## 参考サイト
[Laravelに入門する初心者が絶対に知っておくべき3つの設定項目](https://www.youtube.com/watch?v=AoJ5LHja81o)

元記事を表示

スペース区切りの文字を配列に格納する

スペースで区切られた文字を配列に格納して出力するプログラムを実装しました。
explode関数を簡易的に実装しています。

“`html






スペースで区切られた文字を配列に分ける


元記事を表示

MAMPについての概要&インストール方法(Mac)

# 背景
PHPを使った開発をするため、macでの環境構築が楽そうな**MAMP**を使ってみた。
今回は**MAMP**の概要とセットアップの方法について記す。
# MAMPとは
Macintosh、Apache、MySQL、PHPの各頭文字を取った略称。
Web開発に必要な上記のソフトウェアを一括でインストールし、ローカルにサーバー環境を構築することができるソフトウェアである。
# インストール方法
## ①MAMPをダウンロード
[MAMP公式サイト](https://www.mamp.info/en/mac/)から「Free Download」をクリック。
![image01.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453680/a2d9a7b8-fb62-0a55-d5bc-c584d3d03f48.jpeg)
Macに搭載されているCPUによってダウンロードするパッケージが異なる。
– Intelの場合:MAMP & MAMP PRO(Intel)
– M1/M2チップの場合:MAM

元記事を表示

Array Shapes/ジェネリクス記法とPHPStanを使って配列要素の型をチェックする

## PHPの配列要素の型がチェックできない問題
この、PHPの配列要素の型をチェックできない問題ですが、みなさん一度は思われたことがあるのではないでしょうか?関数やメソッドの引数や返り値、オブジェクトのプロパティにについては型はつけやすくなりましたが、配列の内部構造はまだまだです

例えば関数の戻り値に`array`を指定している場合、配列以外の型を持った値を返そうとするとエラーになりますが、配列の要素に関しては何が入ってこようとエラーは出ません。そのため、思わぬバグに繋がってしまうことがあるのです

そこで本記事ではその解決策となるテクニックをご紹介していきます

## 結論:Array Shapes/旧PSR-5形式のジェネリクス記法で記載し、PHPStanを使用して解析する
早速結論ですが、**PHPDocのArray Shapes記法とPHPStanを組み合わせて配列要素の型をチェック**します

ざっくりと言うと、Array Shapes/旧PSR-5形式のジェネリクス記法でDocコメントを記載し実装を進め、その後に静的解析(PHPstan)を実行することで、型チェックをす

元記事を表示

エンジニアインターン6日目

今日はやっと自分が作ったLPページのテンプレートを本番環境に適用させた。自分がエンジニアとして初めて開発したものになる。先輩エンジニアだったらすぐに終わっていたタスクだが自分にとって初めての成果ということで達成感を感じた。wordpressにひとつひとつ設定した。同じ作業の繰り返しだったため、これもプログラミングを利用してエンジニアらしくできるのではないだろうかという発想になった。そのために引用やすいコードを書くことが大切であると思った。今日帰りにエンジニア部長にインターンはどう?と質問された。自分は実務経験を積めて自分が成長できる最高の環境だと伝えた。自分はとても運が良いと思った。自分はまだまだ足りないことだらけだが、社内のエンジニアのみなさんがとてもやさしく指導していただき、自分が成長できるために努力してくれている。自分は実務経験からどのスキルが求めれれるか、自分が今やるべき課題は何かがはっきりしていて努力するだけである。独学でプログラミングを勉強しているならインターンをやるべきだと思う。自分はスキルではとても劣っているが、将来性を考えて採用してくれる企業もたくさんある。自分がやっ

元記事を表示

laravelでエイリアスのついたカラムをorderByするのに詰まった

# はじめに
クエリビルダで、サブクエリを使い取得していたデータをorderByしようとしたところ下記エラーが発生。

:::note alert
SQLSTATE[42S22]: Column not found: 1054 Unknown column
:::

カラムがないと怒られてしまったので解決方法忘れないように記載。
laravelのVerは8.8

# 成功したやぁつ

“`hogeModel.php
public function getHoge($request)
{
$sort = $request->sort;
$direction = $request->direction;
$page = $request->page ?? 1;

$join = Table2::select(‘table2.table1_id’, ‘table2.created_at’)
->whereNotIn(‘table2s.status’, [“aaa”, “bbb”]);
$sql =
DB::

元記事を表示

PHP初心者に向けてPHPの仕様や便利なメソッドの使い方など

# はじめに
これはPHP歴2年目の私がPHPを触る上で知っておくとよいだろうと思う仕様や便利なメソッドの使い方を紹介する記事です。(間違い等あれば指摘してください!)

## 前提
PHPのバージョンについて 8.2 を前提としています。

## isset、empty、is_nullの違い
「値が存在するかどうか」を判定するには基本的に以下の3つを使用します。

– isset
– empty
– is_null

取りうる値の違いについては以下の表がわかりやすいです。

|値|if($var)|isset|empty|is_null|
|:–|:–:|:–:|:–:|:–:|
|$var=1|true|true|false|false|
|$var=””;|false|true|true|false|
|$var=”0″;|false|true|true|false|
|$var=0;|false|true|true|false|
|$var=NULL;|false|false|true|true|
|$var|false|false|true|true|
|$var=

元記事を表示

Laravelでアプリを作成してみた【ミニ受注入力システム】

## 環境

① project の表すデータベースを『phpMyAdmin』で作成する。

② コマンドプロントでlaravelプロジェクト project を作成する

※ project をc:¥xampp¥laravel デレクトリ下に作成するものとする。

“`
composer create-project laravel/laravel –prefer-dist
<プロジェクト名>
cd <プロジェクト名>

//バージョンを確認する

php artisan -v

//開発用のサーバーを立ち上げる

php artisan serve
“`

③.envファイルを編集する

“`.env
DB_DATABASE=bunbougu_db
“`
④ bunbougus の情報を保存する bunbougus テーブルを作成する

“`
php artisan make:migration create_bunbougus_table
“`
⑤ コードを加えて編集する

“`databese/migrations/table.php
{

元記事を表示

[CTF] OvertheWire Natas 0 to17 Writeup

ウェブセキュリティを扱った[OvertheWire Natas](https://overthewire.org/wargames/natas/)のLevel 0 ~ 17までの解法

## natas0

開発者ツールでソースを確認するだけ

“`html:index.html

natas0

You can find the password for the next level on this page.


“`

## natas1

右クリックが禁止されているが、F12キーで開発者ツールを開ける

“`html:index.html

natas1

元記事を表示

AWSのEC2でとりあえずPHP Laravelを動かす

今回はこのEC2インスタンスにPHPとnignxをインストールしてLaravelを動かすまで持っていく。

環境
PHP 7.3
Laravel 5.8
Amazon Linux 2
PHP, nginx, php-fpm のインストール
AWSでLaravelを動かすには当然PHPをインストールする必要がある。また、HTTPリクエストを受け付けるために nginx をインストールし、nginx から PHP を起動するための php-fpm というモジュールをインストールする必要があるので、まずこれらをインストールする。

これらものジュールをインストールする方法はいくつかある

(1) ansibleなどの構成管理ツールを利用する (2) サーバー構築後に直接コマンドを叩いてインストールする (3) CloudFormation の UserData を利用してインストールする

一番理想なのは (1) のansibleなどを利用する方法だが、ちょっと試すには重すぎるので、今回は (2) の直接コマンドを叩いてインストールする。最後に CloudFormation を利用する方法も

元記事を表示

【Laravel】初心者向けプロジェクト作成

composerから以下コマンドで「sample-project」というLaravelプロジェクトを作成しようとすると、
エラーが出た。
“`terminal:プロジェクト作成コマンド
composer create-project laravel/laravel sample-project –prefer-dist
“`
“`terminal:エラー内容
The zip extension and unzip/7z commands are both missing, skipping
“`
#### 対応方法
php.iniファイルを開いて、「;extension=zip」となっているところを「extension=zip」に変更する。

元記事を表示

【自分用】ミドルウェアとは? / APサーバーとは? / PHPはなぜAP鯖が不要?

# ミドルウェアって何だっけ?
– OSとアプリケーション(WordPress / 業務アプリとか)の間で動き、
アプリケーションの土台となっている。

– OSとアプリケーションの橋渡し的な役割を担うソフトウェアである。

– アプリケーションへのリクエストを処理する。(AP)
\- プログラミング言語で構築されたアプリを実行する。(AP)
Ex. ミドルWeb鯖(動的コンテンツくれ) -> ミドルAP鯖(了解) -> アプリ実行(プログラム)
Ex. クライアント/ブラウザ(静的コンテンツくれ) -> ミドルWeb鯖(了解:静的コンテンツ)

– 特定の機能に特化してOSとアプリケーションを補助している。

– アプリケーションがよく利用する高度で専門性が高い機能をパッケージ化し、
別のソフトウェアとしてまとめたもの。
\- アプリケーションがよく利用する機能とは:
  アクセス管理、トランザクション管理、セキュリティ管理、ユーザー認証、DB接続など

– ミドルがあることによって、アプリは開発の手間を削減できる。
ミドルの機能を呼出して使うことができるから。無かった

元記事を表示

【PHP】カンマ区切りを配列に変換する

**「DBの関係でカンマ区切りでデータを保存する」**
ということはよくあります。
カンマ区切りを配列に簡単に変えられたら・・・となりますね。

そんな時に便利な関数です。

## explode 文字列を文字列により分割する

explode() を使うと、好きな文字列で区切り文字がある文字列を配列にできます。

“`
$str = “アムロ,シャア,ブライト”;
$str = explode(“,”, $str);
// $str = [“アムロ”, “シャア”, “ブライト”];
“`

### URLから必要な情報を取得する時におすすめです

URLから特定の情報が欲しい時に使えます。
URLに持たせている情報で判別したいことはよくあるので。

「/」で区切りたい時は、「https://」を除いてから使うと良いでしょう。
もしくは、「?」かもしれませんね。

### さいごに
カンマ区切りを配列に変換するPHP関数 explode() の紹介でした。

explode() とセットで使いたいのは、implode() です。
配列を文字列で連結してくれます。
つまり、配列をカ

元記事を表示

【Laravel】 General error: 1215 Cannot add foreign key constraint 【エラー】

# はじめに

この記事では、Laravelの学習中に発生したエラーとその解決方法を覚え書きしておきます。

# 環境
Laravel 5.8
MAMP 5.7
phpMyAdmin 4.9.3

# 今回の状況
マイグレーションファイルをいくつか作成、“php artisan migrate“を実行した際、下記のエラーが発生。

“` :発生したエラー
General error: 1215 Cannot add foreign key constraint
“`

## 先に結論

外部キー制約では、参照元のカラムと参照先のカラムの型が一致する必要がある。
→それぞれの型に違いがあったためエラーが発生していた。

# 対処方法
各カラムのデータ型を揃えることで解決。

## ざっくり手順
“php artisan migrate:rollback“

マイグレーションファイルを修正

“php artisan migrate“
で無事マイグレーションできた。

## 具体的な対応
▼外部キー制約を設定するマイグレーションファイル
“`php:2023_01_2

元記事を表示

生のPHPでフリマサービスを作る_part2

### この記事のシリーズ
– [生のPHPでフリマサービスを作る_part1](https://qiita.com/daichi_hasegawa_stars/items/22f12b7c9aa019781b27)

## フリマサービス作成の流れ
1.機能を洗い出す
2.画面設計(今回はPHPの深掘りがメインなので割愛します)
3.テーブル設計
4.クラス設計 ← 今回はここ
5.実装

## クラス設計
色々とクラス設計のやり方や考え方はあると思うが、、
今回はとにかく可能な限りクラスを作ることにする。

※この段階だと最初に思いつく範囲でしか出てこないので、必要に応じて増やしたり減らしたりします。

##### まずは、エラー発生時の処理やDB接続などのなくてはならないものからクラス化

– Errorクラス
– エラー発生次の対応
– Databaseクラス
– DBへ接続
– Varidateクラス
– バリデーションをまとめたクラス
– Constクラス
– 定数などをまとめたクラス

##### 各機能ごとにクラス化

– Re

元記事を表示

エンジニアインターン5日目

今日も前回と同じようなsql文を修正する作業をした。今日は調子が上がらず、苦労した。完全にメンタルで負けた。そこで、先輩エンジニアは自分に1つの課題に手こずっていると徐々に視野が狭くなり、解決とは遠くなってしまう。そういう時はいっかい頭をリセットさせると効果的。とのことだった。自分は昼休憩をして頭の思考をフレッシュにした。その効果はすぐに得ることができ、いろんなアイディアまで浮かんだ。エンジニアは常にエラーと戦う職業である。だからこそメンタルがとても大事になってくる。長い時間うまくいかなかったら1回その課題から距離を置き、頭をスッキリさせて解決できるように試みよ。そして、何回もチャレンジしよ。そしたら少しずつエラーに対して良いメンタルで迎えられると思う。だからこそ何もできない今が大事だ。エラーを解決することに慣れよう。いろんな思考回路を持とう。良いエンジニアはみんなこの道を通っている。継続して自分も良いエンジニアになれるように努力しよ。

元記事を表示

PHPで陳素数を求める

# はじめに
この記事では、陳素数をPHPで求める方法について触れています。
とある面談で「陳素数をPHPで求めてください」とお題があり、行き詰まったのがきっかけで記事を書いています。
別言語でも基本的なロジックは変わらないはずですので、カスタマイズしてもらえれば良いかと思います。

# 陳素数とは
[wikipedia](https://ja.wikipedia.org/wiki/%E9%99%B3%E7%B4%A0%E6%95%B0)より引用
>素数 p が陳素数(ちんそすう、Chen prime)であるとは、p + 2 が素数または2つの素数の積(=半素数)であることを意味する。例えば 19 は素数であり、2 を加えた 21 は 3 × 7 と2素数の積で表されるので陳素数である。この名前は、そのような素数は無限に存在すると証明した陳景潤による。
>陳素数を小さい順に列記すると次の通り。
>2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 47, 53, 59, 67, 71, 83, 89, 101, …

つまり、陳素数(ここで

元記事を表示

CakePHP4 での setTemplates の勘違い

CakePHP4 での setTemplates で若干ハマったので記事として残しておきます。
CakePHP4+setTemplates で検索すると多くの文献では、

“`php
$this->Form->setTemplates([
‘inputContainer’ => ‘{{content}}’,
‘label’ => false,
]);
“`

のように不要なオプションを出力しない書き方として false にて指定していることが多く見つけられます。
が、これは型宣言があいまいなPHP8より前のPHPバージョンでのみ動く書き方で、型宣言が厳密になったPHP8以降では動作せず \src\View\StringTemplate.php でエラーがでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687945/e651b70c-1565-4fd4-a23e-9bb2a8d999d6.png)

開発者に確認したら上記説明に加えて、setTemplatesで

元記事を表示

Mapbox地図内のクリックした地点で、町丁目ポリゴンと人口データを取得し、表示させてみる

## はじめに
今回は、Mapbox地図内でクリックした任意地点で、町丁目ポリゴンと人口総数データをリクエストし、地図上に表示させてみました。主な技術要素・使用しているものは以下になります。
– Mapbox および Mapbox GL JS
– JavaScript
– PHP
– TerraMap API(区画ポリゴンや統計データ等を提供するWeb API)

※今回使用している人口総数データは、令和2年国勢調査(2020年国勢調査)の結果に基づいております。

https://www.mapmarketing.co.jp/terramap-api?grid=qiita&utm_source=qiita.com&utm_medium=referral&utm_campaign=qiita_mapbox_click_point_area_210bb89a6f24f09fc8a1_01

## 完成イメージ
今回の完成イメージは、以下の動画のようになります。
地図上の任意地点で、商圏分析の基礎データとも言える町丁目ポリゴンと人口総数データをリクエストし、表示させました。また表示したポリ

元記事を表示

OTHERカテゴリの最新記事