PHP関連のことを調べてみた2022年07月10日

PHP関連のことを調べてみた2022年07月10日

LaravelのバリデーションRule::inのパラメータをEnumで表現する

Laravelのバリデーションルール `Rule::in` の定義にEnumで指定できないかと思い試してみました。

## 検証バージョン
PHP8.1.6
Laravel9.16.0

## 定義方法
PHPのEnumは内部インターフェースとしてUnitEnumを持っており、`cases()`メソッドを用いてEnumの配列を取得することができます。
しかし、`Rule::in`の引数はstringもしくはintの配列のみ許容しているのでarray_columnでEnumから値を取得して指定してあげる必要があります。

### Pure Enumの場合
“`php:Pure Enum

元記事を表示

DockerのhttpdイメージでWebサーバーを立てる(PHPも動かすよ!)

初めての投稿です!
仕事でコンテナを使う機会が増えてきたので、勉強も兼ねてPHPの動くWebサーバーをDockerで作っていきます。

今回は[Docker公式のhttpdイメージ](https://hub.docker.com/_/httpd)を利用してWebサーバーを立てます。
HTMLだけではなくPHPも動くように作っていきます。
(普通にPHPの動くサーバーであれば[Docker公式のPHPイメージ](https://hub.docker.com/_/php)の「php:-apache」を使うとすぐに動かせそうな気がします。)

**なお、今回はDokerfileでの環境構築を行っていきますー。**

## 前提
– Dockerがインストールされていて、dockerコマンドが利用できる

## 作業環境
– Windows10
– Docker version 20.10.17, build 100c701
– Git Bash

## やってみよう!
### まずはディレクトリ構成
“`:構成
.
├─ Dockerfile
├─ httpd.conf

元記事を表示

HTMLで縦書き台本を描画

声劇台本を投稿できるサイトを作成しました。
旧ボイコネフォーマットの台本をそのまま投稿できるようにしています。

https://taltal3014.lsv.jp/

ただ、台本は横書きだと読みづらい・・・。
旧ボイコネの縦書き仕様が好きだったので、同じように縦書き台本を表示できるかを試してみました。

【環境】
 ・PHP7.4 (フレームワーク:fuelPHP)
 ・MariaDB
 ・jQuery3.3
 ・Bootstrap4

【やりたいこと】
 ・DBに格納された台本テキストを横書きHTMLで描画
 ・「縦書きで表示」ボタンを押すとモーダルで縦書き画面を表示

【DBに格納された台本テキスト原文】
![スクリーンショット 2022-07-09 21.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200881/050a83e9-eb2e-b93d-c4e8-1c770c687cc0.png)
 
【ブラウザ上での表示(横書き)】 ※ボタンを押すと縦書きに切り替わる
![スクリ

元記事を表示

【PHP初級⑧】階乗

[問題]
整数値を入力させ、その値の階乗を表示するプログラムを作成しなさい。ただし、0以下の値を入力した場合は1と表示する。

# コード
“`php
$a = intval(fgets(STDIN));
if($a > 0){
echo array_product(range(1, $a));
}else{
echo ‘1’;
}
“`

↓「5」と入力

# 結果
“`
120
“`

↓「-2」と入力

“`
1
“`

☆array_product()
・・・配列の値の積を計算する関数。

元記事を表示

laravel Featureテストコードで自らにリクエストを送信する方法

# 概要

– laravelのテストコードにてリクエストを送る方法をまとめる。

# 方法

1. `vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php`を継承しているFeatureのテストコードを用意する。(`$php artisan make:test テストクラス名`でテストクラスを生成すれば良い。)
1. Featureテストのテスト関数内に下記のように記載することでGETのリクエストを送信する事ができる。レスポンスが返される。

“`php
$response = $this->get($url, $requestBody, $header);
“`
1. `$url`にはルーティングで定義しているパス部分(ドメイン以外)を格納して渡す。例えば`http://localhost/index`のエンドポイントにGETのリクエストを送りたい場合、`$url = ‘/index’;`とする。`$url`は必須で渡す必要がある。
1. `$requestBody`

元記事を表示

LaravelのDBからCarbonを用いて特定の月のデータを取得する

備忘録に

# 今月のデータを取る場合
“`
// 今月の初めの時間を取得
$now = Carbon::now()->startOfMonth();
// 日付けあふれなしで翌月から1秒引いた時間を取得
$next = Carbon::now()->startOfMonth()->addMonthNoOverflow()->subSecond(1);
// 取得
$data = $this->whereBetween(‘updated_at’, array($now, $next))->get();
“`

nowとnextを変えれば好きな月で取得可能

元記事を表示

TRPGオンラインセッションツール「オンセンルーム」の自宅鯖への設置方法まとめ

本記事で取り上げる「オンセンルーム」ついてですが
ツール本体の詳細解説は本家様で確認してください

https://trpgsession.click/

本家様の設置方法の解説ではレンタルサーバーを使うこと前提に公式では解説されていましたが
自前のサーバーにインストールする手段については詳しいことは何も書かれていないため
実際にサーバーに導入して動かせるようになるところまで調べてみました

とはいっても今どきはレンタルサーバーもずいぶん手軽に
利用できるようになっているのでそこまで旨味はないとは思うのですが
やはり自分の思い通りの部屋を作るにはレンタルサーバーのプランによっては容量が足りなかったり
各ツールさんのサーバーに負荷をかけるのも忍びないということもあるだろうと感じます

前置きはこの辺で今回の記事ではオンセンルームをWebサーバーに設置して
ローカルでオンセンルームを稼働できるまでを解説します。

今回導入する「オンセンルーム」を稼働させるのに必要なものは以下のものです。
Ubuntu20.04
Apache
PHP
PHPの拡張モジュールがいくつか

そして今回の導入条件

元記事を表示

プログラミング初心者の私がQiitaでいただいた金言

## この記事について
この記事は、プログラミング初心者の私が他のユーザーさんからいただいたコメントで、
是非紹介したいコメントがあったので、同じくプログラミング初心者で悩んでいる人達に
共有するために書いております。

# 当時の状況
商社に勤めていましたが、転職に向けて日々の仕事とは別に興味があったプログラミング
を独学で学習している真っ最中でした。
自分の書いたコードがどうしても正常に動作せず、原因と対処方法を検索しては試すので
すが、解決の糸口が掴めず、なかなか進まない苛立ちと焦りが募っていました。

結局、自己解決を諦めて、何が原因かの見通しも立っていない漠然とした状況で、失礼か
とも思いましたがQiitaに助けを求めて質問をいたしました。

# 質問した結果…
質問したその日にデバッグ方法について回答が来ました。
①var_dumpメソッド(プログラムがどのように処理されているか確認するため
に処理結果や経路を確認)
②executeメソッド(SQLが正しく処理されているかも確認するために、戻り値を入手)
③errorInfoメソッド(直近のエラー情報を取得)

元記事を表示

【PHP初級⑦】range関数、array_sum関数

[問題]
整数値を入力させ、1からその値までの総和を計算して表示するプログラムを作成しなさい。
ただし、0以下の値を入力した場合は0と表示する。

# コード
“`php
$a = intval(fgets(STDIN));
$m = range(1, $a);
if($a > 0){
echo array_sum($m);
}else{
echo ‘0’;
}
“`

↓「6」と入力

# 結果
“`
21
“`

☆range()
・・・ある範囲の整数を有する配列を作成する関数。

例)range(1,10)  →  1から10までの整数の配列

☆array_sum()
・・・配列の中の値の合計を計算する関数。

例)
“`php
$a = [2,3,4];
echo array_sum($a);
“`
     ↓ 結果
“`
9
“`

元記事を表示

【PHP初級⑥】switch文(条件分岐)

[問題]
整数値を入力させ、その値が1ならone、2ならtwo、3ならthree、それ以外ならothersと表示するプログラムをswicth-case文を使って作成しなさい。

# コード
“`php
switch(intval(fgets(STDIN))){
case 1:
echo ‘one’;
break;
case 2:
echo ‘two’;
break;
case 3:
echo ‘three’;
break;
default:
echo ‘others’;
}
“`

↓「4」と入力

# 結果
“`
others
“`

↓間違えたところ
“`php
switch($a = intval(fgets(STDIN))){
“`
ここでは変数に代入する必要なし。

☆switch文(条件分岐)
 switch (式){
  case 値1:
   式が値1と等しい場合の処理1;
   break;
 

元記事を表示

PhpStormを日本語化する

# 実行環境
– OS:Windows10
– PhpStorm Version:2022.1.3
# 手順
[File]>[Settings]を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015414/b64f65b9-b63c-4bfd-277b-268e50bc9b8b.png)
[Plugins]をクリックし、「Japanese Language Pack」を検索し、インストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015414/fa811a8a-e442-ce44-18e6-4b6aecfe5610.png)
インストール完了後、Restart IDEをクリックする。
ポップアップが表示されますが、Restartをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

APIサーバーから200が返ってくるのに画面では502になりハマった話

# はじめに
api開発に携わっているフリーランスエンジニアです。
今回はapi開発にあたって、単体テストを通過して結合テストの際にフロント画面で正常動作しているかを確認している際に起こった出来事です。

ネットで調べてもドンピシャな解決法が出てこなかったので、自分に対する備忘録も兼ねてシェアできればと思います。

### トピック
– 事象
– 原因
– 解決方法
– 教訓

### 環境
php 7.1
Laravel 5.5
nginx /1.13.8

# 事象
api開発をし終わり、postmanを使って直接apiサーバーのエンドポイントを叩き、外部apiから情報を取得して、200でレスポンスを返すところまで確認。
テストも作成し、カバレッジも100%。

フロントサーバーからapiサーバーにリクエストを送り挙動を確認する結合テストにおいて、レスポンスは200なのに、フロント画面ではエラーになってしまった。調査してログを見るとフロントサーバーからのリクエストで返ってくるhttp_codeが502だった。

# 原因
apiサーバーのログを確認するが、正常の動作をしておりb

元記事を表示

laravel Hashファサード 文字列ハッシュ化までの道

# 概要

– laravelのHashファサードで文字列がハッシュ化されるまでの道のりを追ってみる。

# 準備

– ハッシュドライバーの確認
– どうやらlaravelでは3種類のハッシュドライバーをサポートしているらしい。
– これから確認するlaravelのコードがどのハッシュドライバーを用いているかをチェックする。(デフォルトはBcrypt)
– 下記のファイルを開く。
– config/hashing.php
– `driver`のキーに紐づく値を確認してハッシュドライバーをチェックする。デフォルトは下記のようにBcryptが設定されているはず。

“`config/hashing.php

元記事を表示

MODXの独自タグ(エレメント)の使い方

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|

MODXがどのような仕組みでPHPのコードを呼び出せるのか調べてみた。そもそもMODXの使い方が分からないので、チュートリアルから試してみた。そして、PHPのコードを呼び出す方法は、WordPressでのショートコードに相当する独自タグ(エレメント)のスニペット`[[xxx]]`や`[!xxx!]`を使うということが分かった。

参照したドキュメントは、以下のもの。
– [MODXを30分で理解する!簡易チュートリアル](https://modx.jp/docs/tutorial/quick.html)
– [サイト用テンプレートの作り方](https://modx.jp/docs/tutorial/howto_make_template.html)
– [MODXのドキュメント](https://modx.jp/docs/) ※まだ読めていない

## MODXの独自タグ(エレメント)のバリエーション

MODXでは「独自タグ」とか「エレメント

元記事を表示

【PHP】三項演算子、Null合体演算子、エルビス演算子

## 三項演算子
演算子の1つで、3つの項目を使用する唯一の演算子

`条件式 ? 式1 : 式2`

“`php
apple
“`

$a の値に`null`

元記事を表示

laravel Hashされた文字列と平文を比較

# 概要

– laravelにてHash化された文字列と平文の文字列を比較する方法をまとめる。

# ご案内

– laravelではなくPHPでHash化された文字列と平文の文字列を比較したい場合はこちら
– [PHP ハッシュ化された値と通常の文字列を比較する](https://qiita.com/miriwo/items/c4f84b77bb163edecdcb)

# そもそも

– laravelのHash化はBcryptHasherが使用されている場合、結局vendorディレクトリ直下でPHPのpassword_hash()関数が用いられている。
– [https://www.php.net/manual/ja/function.password-hash.php](https://www.php.net/manual/ja/function.password-hash.php)
– [laravel Hashファサード 文字列ハッシュ化までの道](https://qiita.com/miriwo/items/b3fa105c28566d5f8cb

元記事を表示

laravel Mockeryで定義したリポジトリインターフェースの戻り値が何を設定してもnullが帰ってくる

# 概要

– laravelにてMockeryを用いてDBへの問い合わせ処理部分のリポジトリインターフェースの関数の戻り値設定を行ったが何を設定してもnullが帰ってきてしまう問題の原因がわかったのでまとめる。

# 原因

– Mockeryで戻り値を指定しているリポジトリインターフェースの関数の戻り値指定がvoidになっていた。

# 各種クラス

– 使用しているコードをかなり簡素化して記載する。(このままコピペしても動作しないので注意)
– モック化したいリポジトリインターフェースクラスと関数

“`FooRepositoryInterface.php

元記事を表示

【失敗例に関する記事】Controllerで使用しているインスタンスを、他のControllerへそのまま渡すのは難しい

他のControllerで使用されているインスタンスを、別のControllerへ受け渡して使うことができないか試みた。
具体的には、名前空間に別のControllerを記載し、メソッドの引数として指定しようとした。

↓以下のようなコードを書いてみた。 ※失敗例なので参考にしても動きません

“`php:ManualController
//呼び出される側のController
public function store(Request $request)
{
$inputs=$request->validate([
‘title’=>’required|max:30’,
]);

$manual=new Manual();
$manual->title=$request->title;
$manual->user_id=auth()->user()->id;
$manual->save();

return redirect()->route(‘step.create’);
}

public functio

元記事を表示

Chapter6 Eloquentの基本(6-1)

# ORMとは?

PHPとデータベースのレコードは基本的な仕組みが異なるので、
データベースのレコードをPHPの変数に入れるとなると、
「とりあえず、レコードは全部連想配列にまとめてしまえ」となるのはやむを得ない。

そこで、PHPのオブジェクトとデータベースの間の、
橋渡しをしてくれる仕組みが *「ORM」* と呼ばれる機能です。

*「ORM」* = Object Relational Mapping

# Eloquentとモデル

Laravelには「Eloquent(エロクアント)」というORMが用意されています。

「モデル」のクラスを定義し、これを利用してデータベース操作を行えるように
設計されています。

モデルは、「テーブルの内容を定義したクラス」です。

# モデルを作成する

モデル作成するphp arisanコマンドを使用する。

“`
% php artisan make:model Person
“`

<注意事項>

*Laravelでは、「テーブル名は複数形、モデルは単数形」という命名規則がある。

# PersonController.php

元記事を表示

【PHP初級⑤】論理演算子5

[問題]
整数値を入力させ、その値が-10未満ならrange 1、-10以上0未満であればrange 2、0以上であればrange 3、と表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if($a < -10){ echo 'range 1'; }else if($a >= -10 && $a < 0){ echo 'range 2'; }else{ echo 'range 3'; } ``` ↓「0」と入力 # 結果 ``` range 3 ```

元記事を表示

OTHERカテゴリの最新記事