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

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

【Laravel】APIテストで自分で用意したテスト用ファイルをアップロードする。

## 背景

Laravelでファイルアップロードをテストする際には`UploadedFile::fake()`でダミーデータを送信することができる。[^1]

“`php
public function test_import_success()
{
Excel::fake();
Storage::fake();

$response = $this->post(route(‘users.excel.import.upload’), [
‘users’ => UploadedFile::fake()->create(
name: ‘users.xlsx’,
mimeType: ‘application/vnd.openxmlformats-officedocument.spread’
)
]);

$response->assertOk();
}
“`

しかし、CS

元記事を表示

【独学ポートフォリオ録?】完成までの半年間と作成背景【Laravel・Docker・AWS】

# はじめに
Webエンジニアへ転職を目指し、自分が独学で実際にポートフォリオが完成したのでその紹介と作成した背景や
苦労した点、学習からポートフォリオ完成までの道筋などを共有しようと思いますので、こちらの記事を通して
これからエンジニアを目指される方に少しでも参考になれたらと思っております。

※採用担当者様がもし、見て頂いておりましたら私のこれまでの行動や学習内容について深く知って頂けたら幸いです。

**※かなりの文量になっておりますので、一旦ストックしてお手すきで少しずつ読むことを推奨いたします。**

## 作成者
– バックエンドエンジニアを目指す高卒26歳
– 2021年2月~独学で学習開始(ほぼ毎日継続してました)
– 好きな言葉は「選択と集中」
– 北海道出身でスープカレーが大好き:pray:

# 目次
[1.作成したアプリについて](#1-作成したアプリについて)
[2.このアプリを作成した背景と目的](#2-このアプリを作成した背景と目的)
[3.ポートフォリオ作成から完成までの振り返り](#3-ポートフォリオ作成から完成までの振り返り)
[4.フィードバックと

元記事を表示

未経験の学生が2ヶ月の共同開発を終えての感想

#はじめに
**・投稿した経緯**
 6月から2ヶ月間、一人の方と私立探求学園の共同開発に参加しました。結論として
とても良い経験で、僕と同じ未経験の方にはとてもお勧めできる内容でした。
振り返りと学習したことのアウトプットも兼ねて今後参加したいと思う方の参考になればと思い
ます。

#目次
・参加前の状況
・参加した理由
・共同開発の概要(簡単に)
・共同開発で身についたこと
・共同開発で苦労したこと
・全体的な感想
・まとめとこれから

#参加前の状況
・大学2年生20歳
・2ヶ月間別のプログラミングスクールに通い、文法などの基礎学習と
 個人アプリをテンプレートの教材をもとに作成した程度
・個人で1からアプリを作るといった経験はなし

#参加した理由
・Laravelのアプリを開発できる
・実務では必須のチーム開発を経験することができる
・一緒に開発する仲間がいる
・講師の方に質問、相談できる環境だった

#共同開発の概要(簡単に)
・2ヶ月間で掲示板アプリとECサイトの作成
・今回の開発人数は2人(基本は3〜4人程度)
・週2回のMTG
・Gitでバージョン管理
・GitHu

元記事を表示

【Laravel8・PHP8】PHPUnitのテストケースの中でseedingすると「PDOException There is no active transaction」とエラーが発生する。

## 背景

テストでマスターデータが必要になった。

テストケース中でシーディングするときに詰まったのでメモ。

## 環境

– Laravel 8.40
– PHP 8.0
– MySQL 8.0

## 事象

テストケースの中でシーディング実行するとエラー発生

“`
$ php artisan test ./tests/Unit/UserTest.php

FAIL Tests\Unit\UserTest
⨯ seed

• Tests\Unit\UserTest > seed
PDOException

There is no active transaction

at vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:279
275▕ */
276▕ protected function performRollBack($toLevel)
277▕ {

元記事を表示

PHP $this::と$this->何が違う?

Qiita投稿 #28

今回は・・・
sqlの基本を復習した時の備忘録です。

今回は生成したオブジェクトの接続方法についての備忘録です。
チュートリアル等を進めていると`$this->`とか`$this::`を使うことが多いと思いますが、この違いはなんでしょうか?
実際に動かして確認してみます。

“`php
class Hoge
{
const hello = “こんにちは”;

public function hello(){
return “こんにちは”;
}
}
“`

上記のサンプルはHogeクラスにhello定数とhello関数を定義しています。ちなみにクラス内に直接`$hello`変数を作るとエラーになります。
それではそれぞれの挙動を確認します。
###$this->hello()

“`php
$hoge = new Hoge();
echo $hoge->hello();
//結果:こんにちは
“`
`$hoge`はオブジェクトを指しますので**`$this=$hoge`**です。
上記の結果から **->**

元記事を表示

区間和問題 paiza問題集

# はじめに
ここ数カ月、毎日こつこつ仕事終わりに勉強しています(主にpaizaスキルチェック、問題集)
そんな中で、今まであまり気にしていなかった累積和の考え方について自分用に記録する。

# 対象の問題
[Paiza問題集「区間和 PHP編」](https://paiza.jp/works/mondai/query_primer/query_primer__interval_sum)

## 問題・条件・入力値
> 〇問題文
長さ N の数列 A と、K 個の区間 (l_1,r_1) … (l_K,r_K) が与えられるので、各区間についての A の区間和 A_{l_i} + … + A_{r_i} (1 ≦ i ≦ K) を求めてください。

>・1 行目では、配列 A の要素数 N と与えられる整数の数 K が与えられます。
・続く N 行では、配列 A の要素が A_1 から順に与えられます。
・続く K 行では、和を求めるのに使う区間の値 l , r が与えられます。

> 〇条件
・1 ≦ N , K ≦ 100,000
・-100 ≦ A_i ≦ 100 (1

元記事を表示

composerを用いてライブラリ(Faker)を使ってみた

今回はcomposerを使って便利なライブラリ「Faker」を使ってみたいと思います。

#前提条件
composerのインストールまでは完了している事とします。

composerバージョンチェック
`composer –version`

“`
Composer version 2.0.8 2020-12-03 17:20:38
“`

任意のディレクトリに移動
`cd <任意のディレクトリ>`

composer.jsonを作成する
`composer require fakerphp/faker`

“`
Using version ^1.15 for fakerphp/faker
./composer.json has been created
Running composer update fakerphp/faker
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0

元記事を表示

【レビュー指摘】phpunitで書いたテストコードのレビューで受けた指摘をまとめてみる。

最近は、Laravelで作られたアプリのテストコードをphpunitで書いています。

今回はphpunitのテストコードについてレビューを受けた際の指摘内容について、二度と同じ指摘をされないようにするためにまとめておこうと思います。中にはphpunitの書き方への指摘というよりはプログラムの書き方自体への指摘や、プロジェクト固有の指摘もあるので、そこら辺は参考程度に見てもらえると嬉しいです。

## 指摘1 :man: <( expectとactualの順序は正しくね ) 第一引数が`expect`、第二が`actual`。 ```.php $this->assertSame($expect, $actual);
“`

## 指摘2 :man: <( プロパティはprotectedに。型の説明も記載しましょう ) テストクラスのプロパティには`protected`を使う。 読みやすいように変数の型も記載する。 **■Before** ```.php private $UserProfileModel; ``` ■**After** ```php protected Us

元記事を表示

データベースからデータを取り出す PHP/MYSQL

#■はじめに
PHPでデータベースと接続しておく
以前に記事を書いたのでそちらを参照ください。
https://qiita.com/pito555/items/77d2f141846a40d8c659

#■①SQL文の準備
$sqlとしてSQL文を入れる変数を用意

●下記SQL文の意味
左から読むとわかりやすい!
テーブル名 FROM(から) *(全部) SELECT(選択)

“` php
$sql = ‘SELECT * FROM テーブル名’;
“`

#■②SQLの実行
$SQL文を実行するために記述します。

▼ $dbh 以前データベースに接続するために書いたPDOを格納しているもの
▼ query 問い合わせる
▼ $sql 実行するSQL文
▼ $stmt PDOStatementとして実行される。

“` php
$stmt = $dbh->query($sql);
“`

#■③SQLの結果を受け取る。
▼fetchAll
全ての行を返す。

フェッチモードを使いデータの結果を受け取る。
PDOでデータベースからデータを取り出した時に配列の形式を指

元記事を表示

In PackageManifest.php line 122: Undefined index: nameでなんか詰まった話

composer2にしたら起きている問題らしい
とりあえずやったことをメモメモ

なんかkey:generateしたらこれが出た

“`
In PackageManifest.php line 122: Undefined index: name
“`

composerのバージョンが1 から 2にしたときに起きたみたい。
合わせいないといけないものだったため、composerを1にする方法で解決した。

バージョン確認して

“`
composer –version
“`

とりあえず 下げてみる
下げるコマンド

“`
composer self-update –1
“`

ちなみに2にする場合はコマンドの1を2にすればいい

以上!!!!

元記事を表示

PHP 基本文法学んでみた

PHP基本文法

僕はRubyをやっていたのでPHPの基本文法はだいぶハードルが低かったです。
早速やっていきましょう!!

PHPとはスクリプト言語でありシンプルな記述だけど大規模アプリケーションの開発ができる。
フレームワークの例として、Laravel(ララベル)、CakePHP(ケイクピーエイチピー)、Zend(ゼンド)などがある。

プログラムの基本構造は3つ!!
1.順次進行  上から順に処理
2.条件分岐  if文などでほにゃららの場合これこれの処理を行う..など
3.繰り返し for文などで◯回繰り返しす処理だど

・・・Rubyとかと考え方はおんなじだね~~やったぜ?

」で終わる
終わりの「?>」は省略可能!
「\n」は改行という意味。
Echoで文字列や変数の中身を参照!!
処理の終わりのセミコロンのは注意ですな^^ Rubyはいらないからね
こういう記述の仕方は何回かやってけば覚えるもんだから大丈夫かな
php Greeting.php ←このコマンドで実行!!
![Good morning.png](

Laravel-Excelで大容量のエクセルファイルをエクスポートする際の対策

## 背景
Laravelには特定のモデルのレコードをエクセル形式で読み書きしてくれる[Laravel-Excel](https://laravel-excel.com/)というライブラリが存在する。

しかし多くのレコードをエクスポートすると処理時間が長引き、クレームやユーザーの離脱等が発生すると考えられる。

その際の対策をサンプルコードも含めてメモ。

## 大容量ファイルのエクスポート

### 方針

1. 処理をLaravelの[Queue](https://laravel.com/docs/8.x/queues)に入れる
2. エクスポート処理
3. エクスポートが終わったらエクセルファイルをS3にアップロード
4. ユーザーにダウンロードリンクをメール通知

### 実装

※本記事ではLaravel-Excelのインストール方法は対象外とします。

以下のartisanコマンドを実行

“`shell
php artisan make:export UsersExport –model=User
“`

下記のようなファイルが生成される。

“`php:b

基礎②〜if文、else、else if文〜 php

# はじめに
If文、for文は基礎的なものだが理解するまでに時間がかかったので今回もまとめてみることにした。具体的な構文は言語によって異なるが、今回はPHPでまとめていきたいと思う。

# 内容

## if文について
Ifとは日本語で「もし〜であれば/ならば」という意味で使われる。
それと同様にプログラミングの世界でも「もし〜ならば」実行するといった、
特定の処理の場合に使われる。

例1:

“`php
$a = 100;
if($a > 50){
//ここで条件を指定する。
echo “$aは50より大きい”;
//処理の実行
}
“`
結果: `$aは50より大きい`

100という数字は50より大きいので「$aは50より大きい」という結果になった。

それでは条件が成り立たなかった場合を見てみる

例2:

“`php
$a = 100;
if($a > 150){
echo “$aは150より大きい”;
}
“`

結果: (条件が成り立たないため処理が実行されず何も表示れない)

## else、else if文

29_新規プロジェクトの作成や初期設定について

##概要
新規プロジェクトを作成するときのコマンドと手順をおさらいしましょう。

##新規プロジェクトの作成
2通りのコマンドがあります。
※ここではプロジェクト名をsrcとしています。

##バーションを指定せずに作成
“`terminal
laravel new src
“`

##バージョンを指定して作成
“`terminal
composer create-project –prefer-dist laravel/laravel src “6.*”
“`

##初期設定
###タイムゾーンの変更
“`config/app.php
‘timezone’ => ‘UTC’,
// UTCをAsia/Tokyoに変更
‘timezone’ => ‘Asia/Tokyo’,
“`

###言語の変更
localとfallback_localの2箇所で設定がありますが、falllback_localは該当言語が見つからない場合の言語なので、enのままにしておきます。
また、**resources\lang**にjaの設定が保存されているフォルダとja.jsonファイルが必要

連想配列からキーと値を指定して抽出する

データベースからレコードを取得した際、大体は以下のような二次元の連想配列である。
この時、あるキーにおいて指定の値を持つものを抽出したいことがある。

“`php:元データ
$array = [
0 => [‘id’ => 1, ‘blood’ => ‘A’, ‘name’ => ‘yamada’],
1 => [‘id’ => 2, ‘blood’ => ‘B’, ‘name’ => ‘tanaka’],
2 => [‘id’ => 3, ‘blood’ => ‘O’, ‘name’ => ‘satake’],
3 => [‘id’ => 4, ‘blood’ => ‘B’, ‘name’ => ‘murata’],
4 => [‘id’ => 5, ‘blood’ => ‘B’, ‘name’ => ‘takeda’]
];
“`

例えば、キー `blood` の値が `B` のものを抽出する場合は以下。[^1]

“`php:
$new_array = array_filter($array, fn($a) => $a[‘bloo

[PHP]foreachで各要素の値を更新する時はkeyでしよう

# この記事の内容
「foreachで回した要素自体の値を更新したい」といったことが、たまにあるかと思います。
(あるよね…?)

上記の要件を満たしたいと思った時に
・参照渡しを使う
・foreachのkeyを使う
大きく分けて上記2種類の方法があると思ってるのですが、個人的にはkeyを使用した方法を使いたいなと感じたので、その辺りの方法とメリデメを残しておこうと思います。

間違ってる点あれば、ご指摘頂ければ幸いです。

# 環境
“`bash:ターミナル
$ php -v
PHP 7.1.33 (cli) (built: Oct 31 2019 17:37:57) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
“`

## ダメなパターン
まずおさらいですが、普通にforeachで値をそのまま代入しても値は変わりません。
foreachを使用すると、元の値のコピーが作られる為です。

“`php
$te

PDOでMYSQLに接続 PHP

#■はじめに
●phpMyadminでデータベースとテーブルを作成している事

●データベースに接続するユーザーを作成する。この時にパスワードも設定しておく。
ユーザーごとに操作権限を決めると誤って必要なものを消したりする可能性が低くなる。
あなたはテーブルだけの権限ね
あなたはカラムのだけの権限ね

#■PDOを使いMYSQLに接続します。
PDOとはPHPでMYSQLに接続するのに必要なもの

“` php
$dbh = newPDO($dsn,$user,$pass);

//結果 下記のように表示されれば成功
object(PDO)#1 (0){}
“`

####▼$dbh
データベースハンドルの略 データベースを操作しますよと言う変数

####▼newPDO
PDO接続を呼び出す。
PDOクラスのインスタンスを作成

####▼$dsn
データソースネームの略
接続したいデータベースの情報を書く
下記のような決まった書き方がある。

“` php
$dsn = ‘mysql:host=localhost;dbname=データベースの名前;charset=utf8’

【Laravel】デフォルトで出力されない例外(HTTPエラー等)をログに出力する

#結論
`App\Exceptions\Handler.php`で`$internalDontReport`配列を、空の配列でオーバーライドする。

#説明
Laravelの例外はすべて`vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler`クラスでcatchされ、ログの出力とユーザへの表示を行います。

ログの出力は`report`メソッドが担当しています。

“`php
public function report(Exception $e)
{
if ($this->shouldntReport($e)) {
return;
}

if (Reflector::isCallable($reportCallable = [$e, ‘report’])) {
if (($response = $this->container->call($reportCallable)) !== fa

はじめまして、

はじめまして、miru-kululuです。
よろしくお願い致します。
#駆け出しエンジニアとつながりたい
#本日の積み重ね

Herokuで簡単なPHPプログラムを動かす

Heroku上で簡単なPHPプログラムを動かします。
こちらの記事は、初学者の方にも分かりやすいよう簡単な説明を心がけています。

##環境
OS:Windows10 Pro 64bit

##事前準備

* Herokuにアカウントを作成
* Gitのインストール
* Heroku CLIのインストール

####Herokuにアカウントを作成
Herokuを利用するにはアカウント登録が必要です。
[https://jp.heroku.com/](https://jp.heroku.com/)
heroku_hp

なお、無料、有料どちらのプランもありますが、個人で利用する程度ならば無料プランで十分でしょう。無料枠の制限についてはこちらに説明があります。
[https://jp.heroku.com/fr