- 1. PHP で計算すると起こるわかりにくい現象
- 2. Laravel8 personal_access_tokens のマイグレーションを無効化する
- 3. formタグだけじゃない$_POST
- 4. 【PHP】PHP5でusortの比較結果が等しくなる要素の時に配列の並び順が変わってしまう
- 5. パスワードのテストでHash::check()がtrueを返し続けた件。
- 6. Composerとは
- 7. PHP fainal定義
- 8. 【PHP】ファイル操作系いろいろ
- 9. 【PHP/継承】クラス内のpublic変数宣言はコンストラクタより先に行われているのだった
- 10. LIKEをbindしようとしたら二度怒られた。
- 11. Laravel AmazonSNSでSMS送信
- 12. Laravel 共通関数作成
- 13. PHP 今更ながらオブジェクト指向を自分自身に向けて解説してみた ~基本編~
- 14. laravel学んで2か月で自サービスを開発した話 Part10
- 15. Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件
- 16. Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスできない(nginx / Docker / Zend Framework 3)
- 17. 【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき
- 18. macのPHPのバージョンを8.1にアップデートする
- 19. ポートフォリオとして、PDCA管理のアプリを作成しました。
- 20. ADRパターン
PHP で計算すると起こるわかりにくい現象
# これは何?
64bit 環境では、PHP の整数型が 64bit であることを知って驚いたので、そこに起因する不思議なことを見ていく。
# 基本的な動き
PHP は、整数を整数で割ると、整数じゃなくなることがある。
“`php:PHP8
10.000000/8.000000=1.250000
“`そして、JavaScript と異なり、型も変わる。
“`php:PHP8
integer/integer=double
“`さらに。
除算結果が整数だと型は double にならない。“`php:PHP8
10.000000/2.000000=
Laravel8 personal_access_tokens のマイグレーションを無効化する
## Laravel 8.6.0 以降、Laravel Sanctumがなぜか標準搭載
– https://github.com/laravel/laravel/pull/5663
– https://github.com/laravel/laravel/releases/tag/v8.6.0Laravel9にも `laravel/sanctum` がプリインストールされています。
– https://github.com/laravel/laravel/blob/9.x/composer.json
(なんでなん…?)
## マイグレーションファイルを消してもテーブルが生成される
https://github.com/laravel/laravel/blob/9.x/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
Laravelをインストールすると `database/migrations/2019_12_14_000001_create_personal_a
formタグだけじゃない$_POST
formタグにおいてpostメソッドを指定するとフォームに入力された値が連想配列としてPHP $_POSTで使用出来るというのがこれまでの理解でした。
今回jQueryのAjaxでもPOST送信が出来て、PHP $_POSTで使用可能と学んだので備忘録とします。
“`Javascript
$.ajax({
url: ‘xxxxxx’,
type: ‘post’
data: {‘fruits’: apples},
})
“`
上記の場合宛先となるurl(‘xxxxxx’)にdata(‘fruits’: apple)をPOST送信することができ、
PHPでecho $_POST[‘fruits’]する事でapplesが出力されます。
【PHP】PHP5でusortの比較結果が等しくなる要素の時に配列の並び順が変わってしまう
# 結論
usortの比較結果が等しくなる時(callbackが0を返す時)は配列の順番は変わらないと思っていたがPHP5ではそれが変わってしまう。
※公式ではPHP8.0.0より前のバージョンで起こるとのこと。https://www.php.net/manual/ja/function.usort.php
# 試したこと
## 検証コード
“`php
$vals = [‘first’, ‘second’, ‘third’];usort($vals, function($a, $b) {
return 0;
});print_r($vals);
“`## 期待した出力
“`php
Array
(
[0] => first
[1] => second
[2] => third
)
“`## 実際の出力
“`php
Array
(
[0] => third
[1] => second
[2] => first
)
“`# PHPのどのバージョンから並び順が変わるかを確認した
[3V4L](htt
パスワードのテストでHash::check()がtrueを返し続けた件。
“`
$this->assertTrue(Hash::check($password, User::latest()->first()->password));
“`なぜ?あぜ?と思ったが、原因は、
“`
User::latest()->first()->password;
“`
で、最後のレコードが取れていないことが原因だった。というのもテストでは複数のレコードにおいてcreate_atの時間が同じになるので、結果、一番最初のレコードが取れてきてしまっていた。で、解決策はこれ。
“`
$this->assertTrue(Hash::check($password, User::all()->last()->password));
“`
これで、最後のレコードのパスワードがとれるようになった。めでたしめでたし。
Composerとは
ライブラリ依存管理ツール。
PHPで開発するにあたって、便利なライブラリやフレームワークをまとめてインストールできる。
よって、開発者がひとつひとつインストールしなくても、同じ環境を再現できる。# インストール方法
ターミナルからDownload Composerのコマンドを入力
https://getcomposer.org/download/# 実行パスが通るように`composer.phar`を移動する
`ほにゃららパスcomposer`とかかなくても`composer`で実行できるよう移動する
`sudo mv composer.phar /usr/local/bin/composer`# 動作確認
`composer -V`# 参考サイト
https://hirooooo-lab.com/development/install-composer/
PHP fainal定義
# finalメソッド・final定数
PHPにおいて、finalで定義されたメソッドや定数は子クラスから上書きできない。“`php
【PHP】ファイル操作系いろいろ
# basename() ファイルパスからファイル名を取得する。
参考:http://www.openreference.org/articles/view/496
“`php:basename
basename( “/tmp/file/hoge.txt” ); // => “hoge.txt”
basename( “/tmp/file/hoge.txt”, “.txt” ); // => “hoge”
basename( “/tmp/file/ ); // => “file”
“`
# rename() ファイルを移動する。
参考:https://www.flatflag.nir87.com/copy-895
“`
dir
├─ tmp
│ └─ hoge.txt =>これをfileに移動したい。
└─ file
“`“`php:rename
rename(‘tmp/hoge.txt’, ‘file/hoge.txt’);
“`# unlink() ファイルを削除する。
参考:https://www
【PHP/継承】クラス内のpublic変数宣言はコンストラクタより先に行われているのだった
PHPのライブラリの継承ラッパーを作っていて認識違いでハマったのでメモ。
# 状況
例えばこんなライブラリがあり。
基本的にはライブラリ内のコードには手を出したくないので、ここには調整は入れませんが、
デフォルトで $hensuu という変数が存在(ここでは宣言のみ)しています。“`php:Library.php
class Library_sample {var $hensuu;
public function test(){
//なんやかんや
}}
“`で、それを継承するラッパークラスを作りました。
“`php:Hoge.php
class Hoge extends Library_sample{
public $hensuu = true;
public $hensuu2 = true;public function __construct()
{
parent::__construct();}
“`
このラッパークラス「Hoge」で変数、$hensuuにtrueをセットしています。
ついでに
LIKEをbindしようとしたら二度怒られた。
# LIKE検索をPHPからしたい。
bindなんたら~でLIKEを書いたら怒られた。
“`php:おこられた書き方.php
$sql = “select * from table where hoge like %:value% “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# え、これも違うのか。
文字列扱いだからクォーテーションがいる!とか思った。
“`php:こりてない書き方.php
$sql = “select * from table where hoge like ‘%:value%’ “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# %も変数に入れてください?
すみませんでした。。。
“`php:ごめんね.php
$sql = “select * from table where hoge like :v
Laravel AmazonSNSでSMS送信
こちらの記事を参考にしています。AWSの設定は省きます。
https://codeeee.net/posts/laravel-amazon-sns-send-smsAWSのパッケージをcomposerでインストール。
“`
COMPOSER_MEMORY_LIMIT=-1 composer require aws/aws-sdk-php-laravel
“`プロバイダ追加
“`php:config/app.php
‘providers’ => [
//…
Aws\Laravel\AwsServiceProvider::class,
],
“`コマンドで設定ファイルを作成
“`
php artisan vendor:publish –provider=”Aws\Laravel\AwsServiceProvider”
“`以下にファイル設定が作成される
“`php:config/aws.php
‘credentials’ => [
‘key’ => env(‘AWS_ACCESS_KEY_ID’, ”),
Laravel 共通関数作成
コントローラー等で使いたい共通関数の作成方法。
app/ 直下にフォルダを作成しその中にファイルを作成。今回はLibraryフォルダを作成した。“`php:app/Library/Hoge.php
App\Library\Hoge::class,
“`コントローラーから呼び出し
“`php:app/Http/Controllers/UserController.php
\Hoge::huga();
“`
PHP 今更ながらオブジェクト指向を自分自身に向けて解説してみた ~基本編~
# 概要
– かなり前に下記のような記事を記載したが、まとめただけでちゃんと理解できていなかった気がするのでもう一度記載する。
– [PHP Laravel オブジェクト指向 用語集](https://qiita.com/miriwo/items/974adcee45f699553cd4)# 前提
– 下記サービスを用いて検証を行った。
– [https://paiza.io/](https://paiza.io/)# 内容
### クラス
– オブジェクト指向の説明でよく「設計図」と言われるもの。
– 設計図と言われるけどそんなにたいしたものではなく、中に関数とか変数とかを入れておいて使い回せるようにしたものである。
– 基本的に一個の.phpファイルに一個のクラスを記載する。
– .phpファイルのファイル名はクラス名と一致させる。
– わかりにくくなるため推奨はされないが一個の.phpのファイルに複数のクラスを定義することもできる。
– 下記のように定義する。(クラス名はパスカルケースで記載する)“`php
laravel学んで2か月で自サービスを開発した話 Part10
qiitaの草を増やした結果、githubの草が除草されました私です
胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件LaravelでAPI作成のした際にルーティングでroutes/api.phpに記載すると /api/〜になってしまう。
/api部分を無くすためには以下を削除すればいい。
“`php:app/Providers/RouteServiceProvider.php
Route::prefix(‘api’) //prefixを削除
->middleware(‘api’)
->namespace($this->namespace)
->group(base_path(‘routes/api.php’));
“`これと同じ挙動でweb.phpなどでも活用できる
“`php:
Route::prefix(‘user’)->group(function () {
Route::post(‘/’, ‘App\Http\Controllers\UserController@index’);
Route::post(‘create’, ‘App\Http\Controllers\UserController@create
Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスできない(nginx / Docker / Zend Framework 3)
諸事情で Zend Framework を初めて学習中の西暦2022年。Zend Framework公式ドキュメントのtutorialを元にハンズオン学習している。
## 1. やりたいことを確認する。
– Zend FrameworkのWelcomeページは http://localhost/ もしくは http://localhost/application/index にアクセスするとWelcomeページが表示されるようにルーティングを設定できるようになっており、そのようなに表示されるようにしたい。
– 開発環境の構築にDockerを利用しており、下記の構成にしている。(Zend Framework の公式ドキュメントでは、Webサーバは Apache が使用されており、 nginx についての記述はない。)| Dockerコンテナ | Dockerイメージ | 備考 |
| — | — | — |
| web | nginx:1.18.0-alpine | |
| app | php:7.4.19-fpm-
【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき
### エラー状況
:::note alert
Laravelでページネーション機能を導入したが
下記画像のように、上手くページ番号が表示されない。
:::
ページネーション導入はこちらの記事を参考しました!
https://leben.mobi/blog/laravel8_pagination/php/
https://biz.addisteria.com/laravel8_pagination/
### 何が原因だったか
“`CSS“`が反映されていないことが原因です。
では、CSSを見てみました。 (cli) (built: Jun 17 2021 21:41:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine
ポートフォリオとして、PDCA管理のアプリを作成しました。
# はじめに
### 記事の目的
ポートフォリオとして作成したWebアプリケーションの紹介記事です。注:PDCAとは
https://cicou.under.jp/myPDCA/login.php
# アプリの概要
# 機能
### 登録
### 一覧
### 編集
### 削除
# 使用技術
### バックエンド
– PHP
### フロントエンド
– HTML
– CSS
– bootstrap
### データベース
– MySQL
### デプロイ
–
# 工夫した点
### 見やすさ
# 最後にhttps://cicou.under.jp/myPDCA/login.php
ADRパターン
# ADRの概要
– Action-Domain-Responder
– ソフトウェアアーキテクチャパターンの1つ
– MVCの改良版# MVCと違うところ
1つのアクションに対して、そのリクエストからレスポンスを定義する。## MVCの場合
例えばMVC実装だと、1つのコントローラーに
– index
– insert
– update
– deleteなどアクションを複数定義する。
## ADRの場合
1クラス1アクションにより
– シンプルなリクエスト→レスポンスの流れ
– 1クラスの責務が明確# 構成
## Action
リクエストを受け取り、ドメインの処理結果をレスポンダに渡す## Domain
必要な処理を行い結果を返す
ビジネスロジックはここに含まれる## Responder
ドメインの処理結果を受け取り、必要な準備を行いレスポンスを返す# 実装例
PHP/Laravel## Actionクラス
– Controllerクラスを継承
– コンストラクタでドメインオブジェクトとレスポンダオブジェクトを注入
– レスポンダに渡す処理をinvo