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

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

LINEで送るのタグの改行をする

aタグでlineで送るボタンをカスタムしたボタンで実装したい。
しかもメッセージは長めなので改行する必要性がある。
と言う時に、\nの改行コードではダメだった。

## 前段として
LINEで送るをリンクで実装する場合の事なので
“`php
リンク先
“`
のような書き方になり、$hensu部分にエンコードした文字列を入れる。
しかし改行コードが\nだと動かない。

“`php:解決策
$kaigyou = utf8_encode(“%0d%0a”);
$hensu = “こんにちは”.$kaigyou.”改行します”;
“`
とした場合にLINEメッセージで得られる出力は
“`
こんにちは
改行します
“`
と言う事になる。

改行コードを明示的にutf8でエンコードしたら解決出来たと。

元記事を表示

【Laravel】Middleware は設定する場所によって実行される順番が異なる

# はじめに
以前Laravelのミドルウェアを用いてLaravel内部で作成したAPIのレスポンスを返す前にログをDBへ記録しようとした際に、ミドルウェアの順番の問題によってかなり手間取ってしまったことがありました。
そのため一度Laravelのミドルウェアの順番に関して把握しておくべきだと考え、調べてみました。
# 環境
OS: Ubuntu-20.04 (Windows 10 の WSL2 上に設置)
PHP: 8.0.10
Laravel: 8.61.0
# 検証に使用するミドルウェアの中身
Laravelのミドルウェアは、リクエストがアプリケーションによって処理される**前**にタスクを実行するものと、リクエストがアプリケーションによって処理された**後**にタスクを実行するものの2種類があります。

今回はミドルウェアの順番を調べるため、storage/logs/laravel.logにデバッグログを出力するミドルウェアを作成します。ログの内容はミドルウェア名とします。

## リクエストがアプリケーションによって処理される前にログを記録するミドルウェアの例
“`app/

元記事を表示

【PHP基礎⑪】ループ処理-1.for文とwhile文

[問題]
Hello Ruki!を10回繰り返して表示するプログラムを作成しなさい。

1.for文の場合
# コード
“`php
for($a = 1; $a <= 10; $a++){ echo "Hello Ruki! \n"; } ``` # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! ``` 2.while文の場合 # コード ```php $a = 0; while($a < 10){ echo 'Hello Ruki!',PHP_EOL; $a++; } ``` # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello

元記事を表示

PHP Goutte\Client でPOST JSON(application/json)するには

Goutte\Clientでスクレイピングというより自動化をしていたんですが、
FormではなくonclickでAJAX的にPOSTしている画面があって
Goutteは基本

“`php
$cli = new Client();
$top = $cli->request(‘GET’, “https://admin.abcd.efg/aaa”);
$loginForm = $top->filter(‘form’)->form();
$loginForm[‘text’] = ‘hello’;
$cli->submit($loginForm);
“`
てな感じでFormありきじゃないといけないっぽいので、
“formじゃないinput”に別途入れる方法ないかな?って探しまくって
途方に暮れていたら
いっそうのことPOSTを投げればいいんじゃないか!とひらめき
ブラウザのDevToolでネットワークを覗き、cURLで取得してみたら
POSTでJSONを送ってる感じだった。

とはいえ、POSTでJSON送りつ

元記事を表示

Laravel のコレクションでちょっと面白かったこと

# はじめに

本当にちょっとしたことです。
忘れそうなのでメモ書き程度に。

# 環境

– Laravel 6.x

# コレクションからランダムに要素を取得できる

“`php:
random());
“`

# おわりに

Laravel のコレクションってけっこう色々なことができて面白いのでこれからも面白いことあったら記録していこうと思います。

元記事を表示

PHP開発で使うVisual Studio Codeの拡張機能[随時更新]

# GitLens — Git supercharged

https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens

# PHP Debug

https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug

# PHP DocBlocker

https://marketplace.visualstudio.com/items?itemName=neilbrayfield.php-docblocker

# PHP Intelephense

https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client

元記事を表示

Laravel で Google 認証

# はじめに

Google 認証の実装方法をメモレベルではありますが備忘録として記載します。

# 環境

– Laravel 6.x

# パッケージインストール

以下コマンドで必要なパッケージをインストールします。

“`sh:
$ composer require laravel/socialite
“`

# 設定

以下の様に設定ファイルを更新します。

“`php:config/services.php
[
‘client_id’ => env(‘GOOGLE_CLIENT_ID’),
‘client_secret’ => env(‘GOOGLE_CLIENT_SECRET’),
‘redirect’ => env(‘APP_URL’) . ‘/login/google/callback’,
],
];
“`

合わせて`.env`に`GOOGLE_CLIENT_ID`と`GOOGLE_CLIENT_SECRET`を設定してお

元記事を表示

【PHP8.2】readonlyなクラスが作れるようになる

[PHP8.1でreadonlyプロパティが実装されました](https://qiita.com/rana_kualu/items/ae96400a0a6981eca64a)が、このreadonly修飾子がクラスにも使えるようになります。
プロパティごとにreadonlyを設定するのではなく、クラス自体を厳格に運用することができるようになります。

以下は該当のRFC、[Readonly classes](https://wiki.php.net/rfc/readonly_classes)の日本語訳です。

# PHP RFC: Readonly classes

## Introduction

PHP8.1で[readonlyプロパティがサポート](https://qiita.com/rana_kualu/items/ae96400a0a6981eca64a)されました。
しかしたとえば、多くのプロパティのある不変クラスの宣言は未だに面倒です。

そこで、このRFCではreadonlyなクラスのサポートを提案します。

## Proposal

PHP8.1で追加されたreado

元記事を表示

Laravel環境構築編【開発メモ】【コマンド】

## M1チップMacのもの
`% platform: linux/amd64`
といったコードをdocker-compose.ymlに入れないと動かない。
また、dockerデスクトップを起動してからじゃないとそもそもの
`% docker-compose up -d`
というものも動かないので注意が必要。
(他の方の記事も参考にしているのにやってしまっているのが現状・・・)
エラーが発生しているので書いておきます。
Encountered errors while bringing up the project.これはポートが他のもので埋まっているということらしい・・・
何してんだかw
## 結局コマンドを変更した。
後日某プログラミング学習サイトでLaravel開発の動画を見たところ・・・
もっと簡単なコマンドを発見したのでここに書いておきます
`% curl -s “https://laravel.build/プロジェクト名” | bash`
このコマンドを打つと、現在いるディレクトリ内に最新版をインストールしてくれます。
その後・・・sailコマンドを実行するのにdocker

元記事を表示

PHP7.4のクラス継承で注意すべきこと:バグなのか、仕様なのか?

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

PHP7.4で継承を使っていると、アクセス修飾子でおかしな挙動がある。バグなのか、仕様なのか分からないが、注意が必要である。

## Userクラス単独でのテスト

まず、Userというクラスを定義してみる。idとnameを属性に持たせる。
“`php
setId($id);
$this->setName($name);
}
public function getId(): string { return $this->id; }
public function getNam

元記事を表示

Laravelでテーブル・モデル・ビュー・コントローラーを作成したい。

Viewの作成

C:\xampp\<プロジェクト名>\resources\viewsフォルダに、任意のテーブル名でフォルダを作成。
ここでは例として、”projects”という名前でフォルダを作成する。

![スクリーンショット (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708305/9ce22b55-8cb3-b31d-34d7-b8a8830a51b3.png)

projects内には、一覧View(index.blade.php)、新規追加View(create.blade.php)、編集View(edit.blade.php)を用意する。createとeditは、detailというフォルダ下に作成しておく。

![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708305/1574620c-9527-066d-31a1-2b0f89728287.pn

元記事を表示

【PHP】プログラムが動く仕組み

未だにPHPがどんな仕組みで動いているのかよくわかっていない!ので確認!!

# イメージ
まずはイラストで確認!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524160/26d17522-31f1-1903-be14-180b9c206aec.png)
引用元:

【超入門】JavaScriptとは?できること・基本をわかりやすく解説

**◎PHPはサーバー上で動いている**
– これが超大事。
– ~~PHP、WEBサーバー(Nginx,Apache,IISなど)がないと動けない。~~
– WEBサーバーは必ずしも必要ではない。ブラウザを介さず、コマンドとして動作させる目的で組まれたPHPスクリプトなども存在する!
※ @px904 さんにご指摘いただき上記修正いたしました。ありがとうございます!
– HTML,CSS,JavaScriptがデスクトップとかに適当にファイル作成しても動くのは、それらが **ブラウザ上で動くプログラム

元記事を表示

XAMPPを用いた仮想サーバー上にLaravelを構築したい。

必要なものをインストール

・XAMPPのインストール

下記から、XAMPPをインストールする。

https://www.apachefriends.org/jp/index.html/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708305/2e0d4f06-64a1-8935-a38e-927f9aa79b1b.png)

設定では、すべてにチェックを入れてもよい。

Composerインストール

下記からインストール。

https://getcomposer.org/download/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708305/1fb0bf6c-cabf-5626-ba35-c6c6bc90f8bd.png)

チェック不要。

環境構築

XAMPP起動<

元記事を表示

[Laravel]コメントに紐づいたアンサーがアコーディオンで表示される実装

### ルーティング
“`routes/web.php
//コメント
Route::resource(‘comments’,’CommentController’)->only([
‘store’,’destroy’
]);
Route::get(‘/comments/{recipe}’,’CommentController@create’)->name(‘comments.create’);
//アンサー
Route::resource(‘answers’,’AnswerController’)->only([
‘index’,’store’,’destroy’
]);
Route::get(‘/answers/{comment}’,’AnswerController@create’)->name(‘answers.create’);

Route::get(‘/answers’,’AnswerController@index’)->name(‘answers.index’);
Route::post(‘/answers’,’AnswerController@stor

元記事を表示

【PHP基礎⑩】絶対値の取得

[問題]
整数値を入力させ、その値を絶対値にして表示するプログラムを作成しなさい。
(できれば変数の値を絶対値に変えるようにする)

# コード
“`php
$a = intval(fgets(STDIN));
echo abs($a);
“`

↓「-8」と入力

# 結果
“`
8
“`

☆絶対値
 abs()   ← absolute value(絶対値)に由来

元記事を表示

【PHP基礎⑨】if構文-4.複数の条件分岐

[問題]
整数値を入力させ、値が正であればpositive、負であればnegative、0であればzeroと表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if($a > 0){
echo ‘positive’;
}else if($a < 0){ echo 'negative'; }else{ echo 'zero'; } ``` ↓「0」と入力 # 結果 ``` zero ``` ☆複数の条件分岐(else if) if(条件式①){ ①が真のときに実行する処理; }else if(条件式②){ ①が偽で②が真のときに実行する処理; }else{ 全ての条件式が偽のときに行う処理; } ☆最初、else{ ;}の部分をelse if($a == 0)としていたけれど、 条件式①にも②にも当てはまらないのは0しかないため、elseだけでよい。

元記事を表示

PHPStanのレベル別エラー発生のサンプルコードと解決方法

## 目次

– [はじめに](#はじめに)
– [前提](#前提)
– [レベル0](#レベル0)
– [レベル1](#レベル1)
– [レベル2](#レベル2)
– [レベル3](#レベル3)
– [レベル4](#レベル4)
– [レベル5](#レベル5)
– [レベル6](#レベル6)
– [レベル7](#レベル7)
– [レベル8](#レベル8)
– [レベル9](#レベル9)
– [おわりに](#おわりに)

## はじめに

特に意識せず、コーディング標準ツールの PHPStan を利用していましたが、レベル毎にどの問題を補足してくれるのか気になったので、まとめてみました。

## 前提

バージョン

– PHP
– 8.1.6
– PHPStan
– 1.6.9

こちらのリポジトリで確認しました

https://github.com/q23isline/study_php/tree/feature/add-sample-phpstan-error

## レベル0

### 基本的なチェック:シンタックスエラー

元記事を表示

早期リターンで簡単リファクタリング

# 追記
@fujitanozomu
ご指摘ありがとうございます。

この記事で取り上げているコードは早期リターンの例としては適切ではありません。
理由は早期リターン適用後のコードにコメントをつけて2つ目のコードと比較すると一目瞭然です。

“`php
// 顧客が存在しない場合falseを返す
if (!$customer) return false;
// 顧客が有効でない場合falseを返す
if (!$customer->isActive()) return false;
// 最終ログイン日時を取得
$lastLogin = $customer->getLastLoginAt();
// 最終ログイン日時が存在しない場合falseを返す
if (!$lastLogin) return false;

// 最終ログイン日時を返す
return $lastLogin;
“`
早期リターンを使用せず改善したコード
“`php
// 顧客が存在していて有効な場合
if ($customer && $customer->isActive()) {
// 最終ログイン日時

元記事を表示

Laravel6+Vue.jsの連携手順

Laravel6とVue.jsを連携して、APIを実行するまでの手順を、メモがてら手順をまとめてみました。

SPAを作成しようとしている方などのご参考になれば嬉しいです?

> ### バージョン
> composer: 2.2.7
> php: 7.4.28
> laravel: 6.20.44
> npm: 6.14.12
> node: 14.16.1
> vue: 2.5.17
> vue-router: 3.1.3

## laravelプロジェクト作成
~~~bash
composer create-project “laravel/laravel=6.*” {プロジェクトのお名前} –prefer-dist
~~~

## プロジェクトのディレクトリに移動して、以下コマンド実行
~~~bash
php artisan serve
~~~
– 以下のようなログが出力されます。出力されるURLをコピーしておきましょう。
~~~bash
Laravel development server started: {ここに出力されるURLをコピー!}
~~~
– コピーしたUR

元記事を表示

Laravel のコレクションとは

## SQL クエリとコレクションの境界

次の2つは同じ結果を返すが、実行されるSQLクエリが異なる。

“`php
$users = User::where(‘id’, ‘<', 2)->get(); // パターン1
$users = User::get()->where(‘id’, ‘<', 2); // パターン2 ``` tinker で確認してみる。クエリログを確認するため最初に `DB::enableQueryLog()` を実行する。 ```php $ php artisan tinker Psy Shell v0.11.4 (PHP 7.4.11 — cli) by Justin Hileman >>> DB::enableQueryLog()
=> null

>>> User::where(‘id’, ‘<', 2)->get()
[!] Aliasing ‘User’ to ‘App\Models\User’ for this Tinker session.
=> Illuminate\Database\Eloquent\Collection {#

元記事を表示

OTHERカテゴリの最新記事