PHP関連のことを調べてみた

PHP関連のことを調べてみた
目次

【Laravel】大文字・小文字・数字が1文字以上含まれるパスワードの生成方法

## 概要

下記の条件を満たすパスワードの生成

– 大文字が1文字以上含まれる
– 小文字が1文字以上含まれる
– 数字が1文字以上含まれる
– 文字数は8文字

### 環境

– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12

## 実際の記述

“`php
private function generatePassword(): string
{
$password = Str::password(8);

if (preg_match(‘/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$/’, $password)) {
return $password;
}

return $this->generatePassword();
}
“`

## 補足

– `Controller`内のprivateメソッドに定義した際の記述
– ハッシュ化(`Hash::make()`)はメソッドの呼び出し先で処理
– 他の文字

元記事を表示

【Laravel】ログイン済みの特定ユーザーのみが閲覧できるページの作成方法

## 概要

– adminユーザーとデフォルトユーザーでテーブルを分けるのではなく、1つのユーザーテーブルのみを作成
– それぞれのユーザーが持つ`admin_id`の値で権限をチェックして、ログイン済み、且つadmin権限を持つユーザーのみが閲覧できるページを作成

### 前提

– Laravel Breezeがインストール済
– `admin_id`カラムを持つUserテーブルを作成
– `admin_id`が1の場合、adminユーザー
– `admin_id`が1以外の場合、デフォルトユーザー

### 環境

– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12
– Laravel Breeze

## 実際の記述

“`php:app/Models/User.php
// 既存ファイルに以下を追記

public function isAdmin(): bool
{
return $this->role_id === 1;
}
“`

“`php:app/Http/

元記事を表示

YouTube Data API V3で動画情報を取得する方法: プロジェクト作成からAPIキーの発行まで

## はじめに
Youtubeの動画リストサイトを構築する際に、Youtubeの動画情報を取得するYoutube Data API V3を利用しました。YouTube Data API V3は、YouTubeのデータをアプリケーションで利用するための強力なツールです。この記事では、Google Cloud Platformでのプロジェクト作成からAPIキーの発行までの手順を、初心者の方にもわかりやすく説明します。

## Google Cloud Platformでのプロジェクトの作成

#### Google Cloud Platform(GCP)にアクセス
[Google Cloud Platform](https://console.cloud.google.com/?hl=ja)にアクセスし、アカウントにログインします。

#### プロジェクトの作成
左上のプロジェクトボタンから「新しいプロジェクト」をクリックし、新しいプロジェクトを作成します。プロジェクト名と請求先アカウントを入力し、「作成」ボタンをクリックします。

![スクリーンショット 2023-11-17 14.0

元記事を表示

formDataでデータを送信するとLaravel(PHP)側で空配列になる原因

## はじめに
Laravelとフロントエンド(例えばReactやNext.js)の間で画像ファイルを送信する際にバイナリデータの送信ではなく、マルチパートフォームデータで送信する際は、`formData`で送らないといけないのですが、AxiosでAPIを叩いてFormDataを送信する際になぜかLaravel側でデータが空配列になってしまう現象です。

https://apidog.com/jp/blog/form-data-content-type-introduction/#:~:text=form%2Ddata%E3%81%A8%E3%81%AF%E3%80%81Web,%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E5%BD%A2%E5%BC%8F%E3%81%A7%E3%81%99%E3%80%82

## エラー内容
問題の典型的なシナリオは、フロントエンドからLaravelのAPIへフォームデータを送信しようとすると、Laravel側で`$request->all()`や`$request->input()`が空の配列を返す

元記事を表示

【個人開発】お金貸借り管理BOT作ってみた(Laraevl ✖️ Line Messaging API ✖️ LIFF)

25卒でエンジニアのインターンをやっている者です。

現在はベトナムのダナンで半年間のエンジニアインターンに参加をしています。

エンジニアを始めてからこれまで、業務以外でオリジナルのアプリを作ってリリースしたことがなかったのですが、作りたいものがあり、結構すぐ作れそうだなと思い今回作成してみましたのでそちらの紹介をします。

これからポートフォリオの開発をしたい人とかの助けになれば良いなと思います。

## 制作動機

作成の動機はここら辺です。
主に自分のお金周りの管理をちゃんとしたいなーという思いが動機としては強いです。

– 現在海外のインターンでルームメイトと同居しており、お金の貸し借りが増えたから。
– 返した・返してないが曖昧になりがちだから。
– 自分が適当すぎて不快にさせる可能性があるなと思ったから。
– お金貸し借り管理系のアプリはあったけど、自分の携帯のストレージが逼迫しているからインストールはしたくなかった。
– アプリインストール より使うにあたって心理的ハードルが低いかなと思った。
– インターン先でLINE BOT や telegram BOTの開発に関わ

元記事を表示

【OCI】Dockerで作成したイメージをOCIコンテナインスタンスで動かしてみる

# はじめに

今回はOracle Cloud Infrastructure(OCI)が提供している
コンテナインスタンスにNginx + PHPが動作するDockerコンテナを
立てて動かしてみたいと思います。

コンテナであれば、VM(Compute)にDocker環境を作って動かせますが、
わざわざそのためにVMを立てて管理するのもスマートではなく
コンテナインスタンスを使ったら手間もかからず利用できるので
そのあたりの簡単な手順を紹介したいと思います。

■参考
コンテナ・インスタンスの概要
https://docs.oracle.com/ja-jp/iaas/Content/container-instances/overview-of-container-instances.htm

OCI Container Instances概要 / OCI Container Instances

ローカル環境に設定したDockerコンテナでNginx +

元記事を表示

symfony2.8 => 3.4 にアップグレード後、キャッシュクリアが出来ない

前提

ローカル環境(xampp)で、Symfony v2.8 を v3.4.49 にアップグレード後、PHP 8.2.10 で動かそうと検証している最中に出会ったエラーです。

動作環境

Windows 10 Pro
XAMPP Version: 8.2.4
PHP 8.2.10
Symfony v3.4.49

エラー内容

キャッシュをクリアしようとすると、
“`
php app/console cache:clear –env=dev
“`
エラーになります。
“`
[Semantical Error] The annotation “@Route” in method AppBundle\Controller\DefaultController::indexAction() was
never imported. Did you maybe forget to add a “use” statement for this annotation? in C:\xampp\htd

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~環境構築編~

# 初めに
PHPの「**Flow**」というフレームワークをご存じですか?
おそらくこのフレームワークを知っている人は少ないと思います。自分もその一人でした。

先日たまたまFlowを触る機会があり、とりあえずQuickstartを試してみるかと思ったのですが
* **公式ドキュメントの手順が省略されていて、PHP初心者には難しい**
* **マイナーすぎて参考資料が出てこない**

ということに苦しめられ、なかなか環境構築が進みませんでした。

github-copilotに助けられながらなんとか完了することができたので、今回は公式ドキュメントの[Quickstart](https://flowframework.readthedocs.io/en/stable/Quickstart/index.html)のソースを元に環境構築方法をまとめてみました!

# Flowとは
Flowとは[flownative](https://www.flownative.com/)社が出しているオープンソースのPHPフレームワークです。

**ドメイン駆動設計**(DDD)を中心原理として設計され

元記事を表示

[小ネタ]PHPで数値を先頭空白埋め・右揃え・桁区切りして表示したい

### やりたいこと ###
要は、数値をこうやって(↓)出力したいってことです。
sprintf関数を使って何とかできないか、ググったり試行錯誤しましたが、(ニーズはあるはずやのに)なかなかしっくりくる答えは見つからず・・・:frowning2:
“`
入力件数 : 12,000件
エラー件数 : 1,000件
スキップ件数 : 200件
出力件数 : 10,800件
“`
***
### 何てことなかった ###
が、そのうちひらめきました。
Max百万台を表示する例です。
“` php
echo “入力件数 :” . sprintf(“%9s”, number_format($cnt_inrec, 0)) . “件”;
“`
sprintfで文字列フォーマット指定するのがミソでしょうか。
Smartyで対応する場合は、左から右にオプションが評価されるので、次のようになります。
“`
入力件数 :{$cnt_inrec|number_format|string_format:”%9s”}件
“`

元記事を表示

【PHP8.4】全角スペースをtrimできるようになるぞー

なんとなく[RFC](https://wiki.php.net/rfc)を見ていたら[Multibyte for trim function mb_trim, mb_ltrim and mb_rtrim](https://wiki.php.net/rfc/mb_trim)というRFCが投票に入っていました。

というわけで、以下はこのRFCの紹介です。

# PHP RFC: Multibyte for trim function mb_trim, mb_ltrim and mb_rtrim

## Introduction

PHPには、マルチバイトのtrim関数がありません。
`preg_replace(“/^\s+|\s+$/u”, ”, $string)`で概ね想定した挙動になりますが、関数を予め用意しておくことでコードの可読性とわかりやすさを向上させることができるでしょう。
また、トリッキーになりがちなこの処理を標準化することができます。
この機能は多くのPHP開発者にとって有用であり、mbstringモジュールはこれで完成にまた一歩近づきます。

ユースケースのひとつとし

元記事を表示

Laravelの`Collection`におけるPHPDocの設定

こんにちは,ご覧いただきありがとうございます。

## はじめに

Laravelをお使いの皆さんはプログラミングする際にPHPDocを使われていますか?
私はいつも使っているのですが,`Collection`の際の使い方がいまいちわかっておりませんでした。
ググってもほしい情報はヒットしませんでした(キーワードの問題?)

今回,プログラミング中にたまたま書き方がわかったので共有します。
といってもシンプルに`array`と同様でした。笑

## `Collection`におけるPHPDoc

“`php
/** @var \Illuminate\Database\Eloquent\Collection<, \App\Models\Model> */
// あるいは
/** @var \Illuminate\Database\Eloquent\Collection */
“`

## 結論

ものは試しですね!

元記事を表示

PHP 変数について

# 対象読者
[こちらの記事と同様](https://qiita.com/bpg_ts/items/1a25f6bd3d4656fb0bda#%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85 “対象読者”)

# 変数とは
### 変数
一言で言えば、「**データを入れるための箱**」。変数を宣言すると、メモリ上に領域が確保される。

変数(箱)を使うメリット
* **名前を付けることができる**
* **再代入が可能**

### 変数の宣言
以下は、`$wallet`(変数:財布)に、1000(1,000 円)を入れて変数を宣言する例。**イコール** (`=`) は、**代入**を表す。
“`php:PHP

“`
:::note info
PHP は **動的型付け** 。`$wallet`(財布)という **変数名** として名前を付与することで、人間が直感的に理解しやすいものとなっている。
:::

### 変数の命名規則
* 「`$ ~`」

元記事を表示

WordPressオリジナルテンプレートでポートフォリオサイトを制作しました

![スクリーンショット 2023-11-09 21.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618748/b679dcb6-c1e6-fcf2-9a67-5e63818e9019.png)

## はじめに
はじめまして。閲覧いただきありがとうございます。
WordPressオリジナルテンプレートでポートフォリオサイトを制作したのでご説明させていただきます。

## サイトのの概要
学習や行動した実績をポートフォリオサイトです。

・制作実績、私について、ブログページ、コンタクトフォームの4つの構成。
・”親しみやすさ”、”温かみ”をコンセプトとして制作。
・自分のできることを詰め込みつつ、サイトから人柄が少しでも伝わるよう制作しました。

## 想定ユーザー
・採用担当者様
・WEBディレクター様

## 機能一覧

| | 機能 |
|:-|:—————–|
| 1 | Swiper3種(FV、制作実績セクション、その他の記事) |
| 2 | カスタム

元記事を表示

Laravelでの安全なウェブサイトの作り方。

## 作成動機

Webアプリケーションの脆弱性と対策について理解を深めたかったため、個人的に好きなLaravelでの対策をまとめた。

### 作成にあたって

作成する際に主にLaravelの公式ドキュメントとIPAの「安全なウェブサイトの作り方 改訂第7版」を参考にしながら作成した。
[参考資料](#参考資料)

また、対策例はあくまで一例です。

コードはGitHubにあげてます。

https://github.com/kk0128jp/SecProLaravel9.git

## 環境

– PHP 8.0.6
– Composer version 2.3.7
– Laravel Framework 9.52.12
– mysql Ver 8.0.29

## 前提

### 根本的解決と保険的対策

IPAでは脆弱性対策について、その性質を基に「根本的解決」と「保険的対策」の2つに分類している

#### 根本的解決

「根本的解決」は「脆弱性を作りこまない実装」を実現する手法。
根本的解決を実施することにより、その脆弱性を狙った攻撃が無効化されることを期待できる。

元記事を表示

N+1問題の概要と解決方法 (Cakephp4)

# N+1問題とは

データベースから情報を取得するときのパフォーマンスの問題。

具体的には、SQLがN+1回発行されてしまうことでパフォーマンスが低下する問題。

## **N+1問題の具体例**

– データベースの構造

N+1問題は、子テーブルの中に親テーブルに紐づく情報が複数存在するときに現れる。

例えば、学校テーブル(親)と生徒テーブル(子)があるとする。学校には複数の生徒が所属しているので、学校テーブルと生徒テーブルは1対多の関係にある。

![スクリーンショット 2023-11-11 11.33.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527059/c9b811fd-8580-8a3e-f9aa-8ce1408c016d.png)

田中ひめ、鈴木ひなは西高校に所属しており、それ以外の3人は中央高校に所属していることがわかる。

– 典型的なコード例でのN+1問題の発生

冒頭に示した通り、N+1問題はSQLがN+1回発行されてしまうことでパフォーマンスが低下する問題

元記事を表示

Laravel クイズ ~Qiita Night PHP 2023 Winter~

本スライドは**フルスクリーン**,倍率 **50%** での閲覧を推奨します

## 自己紹介

通算 Qiita 9 位らしい。
(最近あんまり書いてなくてごめんね…)

# 今日のテーマ

Laravel クイズ ~For Qiita Night 2023 Winter~

## 以前の問題

https://quiz-maker.site/quiz/play/1QT

元記事を表示

LaravelのEloquentでカラムを更新できなかった凡ミスの話

# はじめに
タイトルの通り、凡ミスの話なので参考になる方は少ないかもしれませんが、自戒と備忘を兼ねて記事に残しておきます。
# 何が起こったか
以下のようにLaravelのEloquentを使用してデータのupdateOrCreateを行ったところ、column1だけ更新され、column2が更新されませんでした。
“`php
Table1::updateOrCreate([
‘id’ => 1
], [
‘column1’ => 1,
‘column2’ => 2
]);
“`
# 最初にやった対応(悪い例)
初動でミスってしまったのですが、column2が外部キーだったため、それが影響しているのではないかと考えてしまい、色々調べてみてもわからず(原因じゃないので当然ですね)、以下のようにEloquentを使用せずにクエリビルダで更新するようにしました。
“`php
DB::table(‘table1’)->updateOrInsert([
‘id’ => 1
], [
‘column1’ => 1,
‘column2’ => 2
]);
“`

# 正しい対応

元記事を表示

Laravel10の環境構築手順書(Mac, Laravel Sail)

# 対象
– 初めてmacOSでLaravelを触る方

# ゴール
– Laravelのトップページを表示できること
– phpMyAdminとの接続を確認できること

# 前提
##### Docker Desktopのインストールが完了している
以下のサイトよりDocker Desktopのイメージファイルを入手できます。
使用するPCのチップにあったものをダウンロードし、インストールを行ってください。

https://docs.docker.jp/desktop/install/mac-install.html

# 手順
### 1. Laravelパッケージのインストール

“` :CLI
curl -s “https://laravel.build/[アプリケーション名]” | bash
“`
コマンドラインを用い任意のディレクトリで上記のコマンドを実行することにより、Laravelのアプリケーションが作成されます。

アプリケーション名は自由に設定できます。
例えば“`test“`というアプリケーション名にしたい場合は
“`curl -s “https:/

元記事を表示

CakePHP フォームの入力を検知して、背景色を変える

## 作成の背景
よく可変で入力フォームを作成する事があり、備忘録として参考コードを残そうと思ったから。
どんな感じで書くっけ?って、思った時すぐ思い出せるように、まとめます。

## 環境
JQUery
CakePHP4

## 概要
DBテーブルにある回答フォームの配列から可変で複数のフォームが自動生成されます。
そのフォームを入力した際、視覚的に入力済みを確認できるよう入力した場合、背景色を変更します。
この変更をJSでやろうという事です。

## さっそくコード
“`js
$(document).ready(function() {
$(‘input[type=”checkbox”]’).change(function() {
var infoBox = $(this).closest(‘.info-box’);
//ここでcheckboxのcheckedの有無を確認してます。
if ($(this).is(‘:checked’)) {
infoBox.c

元記事を表示

CodeIgniterでもテンプレートエンジンが使いたい

## はじめに
今までLaravelではBladeという強力なテンプレートエンジンを使用してきましたが、CodeIgniterの世界ではPHPをそのまま使用するのが一般的だそうです。しかし、テンプレートエンジンを使いたいと思い、その方法を調べてみました。

## 1. CodeIgniterにテンプレートエンジンを導入
CodeIgniterでは、サードパーティ製のテンプレートエンジンを導入することが可能だそうです。例えば、TwigやSmartyなどのテンプレートエンジンライブラリをCodeIgniterプロジェクトに統合することで、テンプレートの使い勝手を向上させることができます。

## 2. テンプレートファイルの作成

テンプレートエンジンを導入したら、テンプレートファイルを作成します。これには、HTMLの基本構造や共通の要素を含めます。変数を挿入する場所は、テンプレートエンジンのシンタックスに従って指定します。例えば、Twigを使う場合、{{ variable_name }}のような形式で変数を表示できます。

## 3. コントローラーでテンプレートをロード

コントロー

元記事を表示

OTHERカテゴリの最新記事