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

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

【PHP】try-catch-finallyの挙動について

ふと、tryやcatchのブロックでreturnしている場合finallyのブロックって実行されるのかな?と疑問に思ったので詳しく調べてみることにしました。

## そもそもtry-catch-finallyとは
tryブロックの中の処理に例外的なエラーが発生したときにcatchブロックの処理がされます。エラーが発生しなかった場合はcatchブロックの処理はされません。エラーハンドリングをする際によく使われます。
そしてfinallyとは例外は発生したかどうかは関係なくtryおよびcatchブロックの後で常に実行されます。

早速挙動確認していきます。
“`php
try {
echo ‘try’;
} catch (Exception $e) {
echo ‘catch’;
echo $e->getMessage();
} finally {
echo ‘finally’;
}

//実行結果
try
finally
“`
例外が発生していないのでcatchブロックの処理はされません。

次はあえて例外を発生させてみます。
“`php
try {

元記事を表示

PHPでGoogleスプレッドシートの値を取得する方法

## 前提
– Web開発経験なし(環境もなし)
– Mac OS(intel)
– ローカル環境で実施
– Webサイトでスプレッドシートの値を取得したい
– Google Sheets APIを使う

## 作業1 – ターミナル
### 1. homebrewを知る
homebrewとは何?と思ったので以下を参考に気持ち把握する
https://qiita.com/omega999/items/6f65217b81ad3fffe7e6

### 2. homebrewをインストール
1. 以下を参考に実施する(インストール途中、思ったより止まったけど待っていれば完了するはず)
https://qiita.com/zaburo/items/29fe23c1ceb6056109fd

2. Appleシリコンの場合は以下を参考にしてMacがパスを通す(intel前提だけどメモとして)
https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc#1.-%E3%83%91%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A

元記事を表示

山浦清透さんの「独学エンジニア」をはじめてみた

## 前提
エンジニアの世界には「完璧を目指すよりまず終わらせろ(Done is better than perfect.)」という格言があるそうです。
Facebook創業者(元:Meta)のマークザッカーバーグの言葉だそうです。
本記事も、まずは書き散らし程度に「完成」させて「投稿・公開」することが目的になります。

## プログラミング学習歴
プログラミングスクールで1,000時間以上の学習をしたうえで内定(2023年1月入社)もいただけているので、全くの初学者ではないです。
ただ実務経験はないので、学んできたPHP/Laravelを伸ばす目的で「独学エンジニア」はレベル感や使用言語などあらゆる面で今の自分に最適だと思いました。

その他詳細は下記リンク(Wantedly)に記載
https://www.wantedly.com/id/msys825

## 受講後になっていたい姿を書き出そう(課題)
レッスン1の課題の一つになります。(下記リンク課題)
どうせ書き出すのであれば、Qiita記事にして公開してみようと思いました。
https://dokugaku-enginee

元記事を表示

【PHP】[3,7,0,8,4,1,9,6,5,2]配列を定義し、最初は要素番号を0で表示して、次にその配列要素の要素番号として表示する10回繰り返すプログラムを作成せよ

[3, 7, 0, 8, 4, 1, 9, 6, 5, 2]で初期化される配列を宣言し、最初は参照する要素番号を0とし、この参照する要素番号の配列要素の値を表示し、次にその配列要素の値を次の参照する要素番号とし、この次の参照する要素番号の配列要素の値を表示し、さらにその配列要素の値を次の参照する要素番号とし、……を10回繰り返すプログラムを作成せよ。(具体的にどのような手順かは実行例を見て考えよう。)

# コード
“`PHP

元記事を表示

LaravelとmicroCMSでのコンテンツ管理 microCMSのAPI作成編

PHPフレームワークであるLaravelと、ヘッドレスCMSであるmicroCMSで、コンテンツ管理機能を実装する手法をご紹介します。自分が実装する際にはあまり参考記事がなく苦労した部分もありましたので皆様のお役に立てれば幸いです。Laravelの実装とmicroCMSのコンテンツ管理2つに関してハンズオン形式で記述していきます。

この記事では、microCMSのコンテンツ管理に関してハンズオン形式でご説明していきます。

# microCMSでコンテンツ管理

今回はヘッドレスCMSであるmicroCMSでコンテンツ作成を行います。
ヘッドレスCMSとはHTMLやCSSは管理せず、データのみを管理するCMSになります。
データ管理の仕方はデータベースに近いイメージで、値のみを保存します。
APIを作成してエンドポイントにGETリクエストを送るとjson形式でデータが返されるので、それをLaravel側で受け取って内容を表示します。

## 1. microCMSアカウントとプロジェクトを作成

microCMSのホームページから新規アカウント登録を行います。

https://m

元記事を表示

【サーバー】無料でクライアントサーバー型のゲームを制作する3

# はじめに
[前回は環境構築](https://qiita.com/kappysan/items/0fa9079468197780d712)をしました。
今回はサーバーサイドの実装を進めます。
[こちら](https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d)のようなLaravel入門記事が参考になります。

# 仕様
以下の画像のようなランキング機能を実装します。
![ランキングモーダル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/07b017bd-f0e3-ec8d-2954-d5ee8ccea07b.jpeg)
ランキングにはユーザー名とスコアを表示します。
ゲーム開始前にユーザー登録はなく、ランキング登録時のみユーザー登録できるようになっています。
ランキング登録時に、新規ユーザーの場合はスコア登録と同時にユーザー登録も行い、既存ユーザーの場合はハイスコアなら更新します。

# DB設計
## ユーザー情報テーブル
`u

元記事を表示

【環境構築】無料でクライアントサーバー型のゲームを制作する2

# はじめに
私用のPCでクライアントサーバー型のゲームを制作したかったので、環境構築からはじめました。
クライアントサイドはUnity/C#を使います。
サーバーサイドはMAMPでローカルサーバーを構築し、PHP/Laravelを使います。
MAMPではなくAWSが使えるとよかったのですが、無料でできなくなるので諦めました。
ローカルサーバーなので、公開はできず、自分用になります。

# 動作環境
Mac OS Catalina 10.15.7

# クライアントサイドの環境構築
unityとvscodeをインストールします。
これらはすでにインストールしていたので手順を省きます。
バージョンは以下のものを使いました。
Unity 2020.1.8f1

# サーバーサイドの環境構築
## MAMPの導入
[こちら](https://qiita.com/tsukishimaao/items/cab4caa065d901608856)の記事を参考に進めます。
まずはMAMPをインストールします。MAMP PROは使いません。
MAMPを立ち上げ、Preferences>Portsを確認

元記事を表示

【ゲーム紹介】無料でクライアントサーバー型のゲームを制作する1

# ゲーム紹介
蜂を操作して制限時間内にできるだけたくさんの花の蜜を集めるゲームです。
![ミツあつめ3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/829f84ed-b892-66e2-a9f2-3d851a51cb78.gif)
左右の矢印キーまたはボタンクリックで蜂を動かします。
落ちてくる「おはな」に触れるとポイントゲットです。
![ミツあつめ2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/67919da1-7d80-57a3-c973-7321952345d8.gif)
天敵の「とり」に触れると集めた「おはな」ポイントが0になってしまいます。
![ミツあつめ4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/d4ac2eb3-15d4-f0b0-3bf5-1a23f5704cb7.gi

元記事を表示

Ubuntu20.04にて、phpinfoが表示されなかったが、解決した。

# はじめに
Ubuntu20.04にて、phpinfoが表示されなかったが、解決した。

# 最終更新日
2022年8月1日

# 環境の情報
OS
Ubuntu20.04

# 注意
最新の状態を確認して下さい。

# 公式さまはこちら
https://www.apache.org/
https://httpd.apache.org/docs/2.4/mod/event.html

# 参考さまはこちら
https://stackoverflow.com/questions/47024111/apache-installing-and-running-php-files

https://web.just4fun.biz/?Apache/a2enmod%E3%81%A8a2dismod%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%8B%95%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

# 状況
![Screenshot from 2022-08-01 14-22-34.png](ht

元記事を表示

FilamentでLaravelの管理画面を爆速構築

公式ドキュメント

https://filamentphp.com/docs/2.x/admin/installation
## Filamentとは
>インタラクティブなTALL stackアプリを迅速に構築するためのツールコレクション
・ 管理パネル
・ フォームビルダー
・ テーブルビルダー
・ 通知
・ etc …

… っと、ものを見た方が早いですね><

https://demo.filamentphp.com/
## 導入
手始めにログインページとダッシュボードを作成していきましょう(^O^)/
##### インストール
“`bash
composer require filament/filament:”^2.0″
“`
##### 管理者ユーザ作成
“`bash
php artisan make:filament-user
“`
これで作成されました(´∀`=)
##### ダッシュボードへアクセスしてみましょう!
http://localhost/admin/login
![f_d.png](https://qiita-imag

元記事を表示

LaravelのpaginationをSQL直接実行で利用する

# はじめに
Laravelのpaginationを利用するにはクエリビルダまたはEloquentクエリでpaginateメソッドを使用することで簡単にできます。
しかし、何重もサブクエリを定義しているSQLをクエリビルダやEloquentクエリで記述するには困難なので直接SQLを実行したい場合があると思いますが、その場合はpaginateメソッドを使用することができません。

今回は直接SQLを実行した場合でもLaravelのpaginationを利用する方法を紹介します。

※Laravelのpaginationにはいくつか種類がありますが、今回紹介するのはpaginateメソッドで利用できるものにフォーカスしています

# paginationを実現するには

paginateメソッドを実行した時の返り値は`Illuminate\Pagination\LengthAwarePaginator`です。
このインスタンスがpagination機能で必要なメソッドを持っているので、SQLを直接実行して取得したデータを`LengthAwarePaginator`に設定することでpagin

元記事を表示

PHPのアクセス修飾子でクイズ

## PHPのアクセス修飾子
“`php
// PHPのバージョンは8.0.3とする
class Super {
// public、protected、privateそれぞれのパターン
アクセス修飾子 $name;

public function __construct(string $name)
{
$this->setName($name);
}

public function setName(string $name): void
{
$this->name = $name;
}

public function getName(): string
{
return $this->name;
}
}

class Sub extends Super {
public function __construct(string $name)
{
parent::__construct($name);
}
}

$sub = new Sub(‘佐藤さん’);
$sub->name = ‘鈴木さ

元記事を表示

Laravel + Vue.jsでaxiosからのリクエストが失敗した単純なミス

## 環境
* Laravel:6
* Vue.js:2.6.14
* axios:0.19
## 事象
Laravel + Vue.jsでaxiosからの`put`リクエストでデータを更新しようとしたのですが、
以下のようなエラーでうまくいきませんでした。

“`javascript:resources/js/components/ExampleComponent.vue
const response = await axios.put(‘books/’, {
data: val,
}).catch(e => {
console.log(e);
});
“`

ChromeのDevToolsより
“`
Request Method: PUT
Status Code: 405 Method Not Allowed
“`
エラー405が返ってきてしまいました。
## 原因
そもそもLaravelのルーティングのメソッドが`patch`だったのに、axiosのエイリアスを`put`にしていたことが原因でした。

“`php:routes/web.php
Ro

元記事を表示

Laravelでメールサーバを複数利用する

# はじめに
とあるシステムで外部メールサーバと社内メールサーバを切り分けて利用するケースがありましたので、備忘録がてら記載します。

FWというか通常のシステムでも複数メールサーバの切り分けはあんまりやらない気がするので、需要は薄いと思いますが・・・

# やること
以下のメール設定値をオーバーライドして、メール送信時の設定を切り替える。

## 1. 環境設定値の追加
“`diff_php:.env
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=”hello@example.com”
MAIL_FROM_NAME=”${APP_NAME}”

+ CUSTOM_MAIL_HOST=mailhog
+ CUSTOM_MAIL_PORT=1025
+ CUSTOM_MAIL_USERNAME=null
+ CUSTOM_MAIL_PASSWORD=null
+ CUSTOM_MA

元記事を表示

laravelで画像投稿処理を実装する

# 前書き
現在独学でlaravelを使ったポートフォリオの作成に取り組んでいます。
今回は画像登録・表示処理で詰まったところを備忘録として投稿します。

# 環境

https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4

上記記事に準じて環境構築を行っています。

# 実現したいこと
・作成済みのユーザーページを編集する際に、名前、年齢の他にアイコンとして画像を登録できるようにする。
・登録した画像を表示する。

# 対応方法
①編集フォームにinputタグを設置し、ファイルを送信できるようにする。
“`php:edit.blade.php


~~~

“`
*formにtype

元記事を表示

【PHP初級㊲】配列応用3

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)

{3, 7, 0, 8, 4, 1, 9, 6, 5, 2}で初期化される大きさ10の整数型配列を宣言し、整数値を入力させ、要素番号が入力値の配列要素の値を参照し、さらにその参照した値を要素番号とする配列要素の値を参照して表示するプログラムを作成せよ。入力値が配列の要素の範囲外であるかどうかのチェックは省略してよい。

# コード
“`php
$a = [3,7,0,8,4,1,9,6,5,2];
$m = intval(fgets(STDIN));
$i = $a[$m];
echo $a[$i];
“`

↓「6」と入力

# 結果
“`
2
“`

元記事を表示

【PHP初級㊱】配列応用2

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)

{3, 7, 0, 8, 4, 1, 9, 6, 5, 2}で初期化される大きさ10の整数型配列を宣言し、整数値を2つ入力させ、要素番号が入力値である2つの配列要素の値の積を計算して表示するプログラムを作成せよ。入力値が配列の要素の範囲外であるかどうかのチェックは省略してよい。

# コード
“`php
$a = [3,7,0,8,4,1,9,6,5,2];
$m = intval(fgets(STDIN));
$i = intval(fgets(STDIN));
echo $a[$m] * $a[$i];
“`

↓ 
「4
 8」 と入力

# 結果
“`
20
“`

元記事を表示

【PHP初級㉟】配列応用1

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)

{3, 7, 0, 8, 4, 1, 9, 6, 5, 2}で初期化される大きさ10の整数型配列を宣言し、整数値を入力させ、要素番号が入力値である配列要素の値を表示するプログラムを作成せよ。入力値が配列の要素の範囲外であるかどうかのチェックは省略してよい。

# コード
“`php
$a = [3,7,0,8,4,1,9,6,5,2];
$m = intval(fgets(STDIN));
echo $a[$m];
“`

↓「0」と入力

# 結果
“`
3
“`

元記事を表示

Laravelにおける2重サブミット防止

# 初めに
私は、業務系のWebアプリケーションを作っているエンジニアです。

問合せでよくあるのが実行ボタン押しても、なかなか画面が変わらなくて、もう一度押したらエラーになりましたってやつ。
(なんで対策してないんだよ・・・)

てことで、Laravelにおける2重サブミット防止方法は以下の通りです。

# 2重サブミット対策
やることは2つ!

* バックエンドで、リクエストを受けてからトークンを再生成させる。そうすると、レスポンスが返る前に再度サブミットされるとトークンミスマッチ(419:TokenMismatchException)になる。
* フロントエンドで、ボタン押下後にボタンを非活性にする。

## サーバーサイド
### 1. コントローラ
トークンを再生成した状態で、レスポンスが返る前に再度サブミットされるとトークンミスマッチが発生します。
※2〜3は、コード修正不要。

“`php
$session->regenerateToken();
“`
### 2. ミドルウェア
トークンマッチをチェックする。
※標準で設定されてるので、追加は不要。

“`php:

元記事を表示

PHP 現場で使った愉快な配列メソッド達

## はじめに
今回は現場で使用した配列メソッドの使用方法についてまとめました。
すべての使い方を紹介しているわけではないのでご了承ください。
また、この記事を読んでぜひとも愉快なエンジニアになる一助になれば嬉しいです。

## 紹介する愉快な配列メソッド達
・array_key_first
・array_key_exists
・array_keys
・array_merge
・in_array
・array_search
・array_column

## array_key_first
配列内の先頭メソッドを取得します。
連想配列の場合は、先頭keyを取得します。
https://www.php.net/manual/ja/function.array-key-first.php

“`php
$array = [
‘A’ => ‘a’,
‘B’ => ‘b’,
‘C’ => ‘c’,
];

$result = array_first($array);

print_r($result); // 結果:A
“`

## array_key_exists
指定したkey

元記事を表示

OTHERカテゴリの最新記事