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

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

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を記載し、メソッドの引数として指定しようとした。

↓以下のようなコードを書いてみた。 ※失敗例なので参考にしても動きません
“`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 function get

元記事を表示

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 ```

元記事を表示

オリジナルアプリ第2弾を作成中

オリジナルアプリ第2弾を作っています。
プログラミングスクールとは別です。

# どんなアプリか?
小説執筆ツールです。(投稿サイトではなく、執筆するためのツールです)
UIはかなりシンプルになると思います。(そこまで凝ろうとすると大変なので)
## やっていること
一からコードを書くと大変なので、プログラミングスクールでやったコピーアプリのコードを再利用し、
適宜変更しながらコーディングしています。
## 公開などは?
現段階では、公開するかどうかは未定です。

### 作成中のコード
https://github.com/kazunarigit/noveltool/tree/main
ほとんどはサブブランチにプッシュしているので
https://github.com/kazunarigit/noveltool/tree/check
こちらになります。

とりあえず、こんな感じです。

元記事を表示

プログラミング初心者の私がQiitaで質問したら起きたあるある①

# Qiitaで質問したら起きたあるある

私にはこんなことがあります。

アプリを制作していたら、突然望んでいないバグが生じる。

何が起きたんだ。

どうしよう…何とかしようと考える…解決できない…課題が進まない…Qiitaで質問しよう

すると…なぜか自分自身で解決方法が降りてくる。

## 気付いたこと
Qiitaで質問する際に私が気をつけていることが、そのまま正しいバグ対処方法になっていた。

①正解は何か。(目標の明確化)
②問題点の把握(目標と現状の比較、入手している情報の整理)
③原因の分析(なぜ問題が生じているのか思案)
④対処したこと

質問する前の私は、②で問題点を把握したつもりになって、③を抜かして、④に行くことが多い。

## とりあえず思いつくままに記事を書いて見たわけだが
初心者の私は、バグが生じた際に、”どうしよう”から考える癖があるようだ。
その結果、①を考えて、④に向かう傾向がある。(②③を考えていないわけではないが、
結果的に考えていないことと同じである。)

質問を投稿した後にいただく他のユーザーさんからのコメントの多くが、

元記事を表示

[Laravel]Eloquentモデルでデータ保存・取得時に値を加工する

配列を文字列として保存したり、取得時に文字列から配列にしたいといったように、DBからのデータ取得・保存時に値を加工するやり方を紹介します。
## Eloquentモデルで値を加工する
Eloquentモデル内に下記の記述をすることで値の取得・保存時に加工を自動で行うことができます。
“`php
// Eloquentで値を取得する際に自動で呼ばれる
// カラム名はアッパーキャメルケース
public function getカラム名Attribute($value)
{
// 値を加工する処理

// 加工後の値をリターン
return 加工後の値
}

// Eloquentで値を保存する際に自動で呼ばれる
// カラム名はアッパーキャメルケース
public function setカラム名Attribute($value)
{
// 値を加工する処理

// Eloquentモデルが持つattributeプロパティに加工後の

元記事を表示

[備忘用]laravel, php覚書

## 目的
忘れがちな関数や記法をストックしておく
“`php
where(‘id’, $id)
//と
find($id);
“`

findの方がシンプルに書ける

“`php
!is_null($a) ? $a : $b
//と
$a ?? $b
“`

null合体演算子

“`php
$model->attach($id);
“`

中間テーブルを作成

“`php
$model = Model::find($id)->update();
$model = Model::create($params);
“`

作成/更新したデータを返すので、そのデータを再利用する時に使う。

“`php
$arr = [’44’ => 0];
dd(empty($arr)); //false

$arr = [’44’ => ”];
dd(empty($arr)); //false

$arr = [’44’ => false];
dd(empty($arr)); //false

$arr = [’44’ => null];
dd(empty($arr)); //fa

元記事を表示

OTHERカテゴリの最新記事