- 0.1. 【PHP/継承】クラス内のpublic変数宣言はコンストラクタより先に行われているのだった
- 0.2. LIKEをbindしようとしたら二度怒られた。
- 0.3. Laravel AmazonSNSでSMS送信
- 0.4. Laravel 共通関数作成
- 0.5. PHP 今更ながらオブジェクト指向を自分自身に向けて解説してみた ~基本編~
- 0.6. laravel学んで2か月で自サービスを開発した話 Part10
- 0.7. Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件
- 0.8. Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスできない(nginx / Docker / Zend Framework 3)
- 0.9. 【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき
- 0.10. macのPHPのバージョンを8.1にアップデートする
- 0.11. ポートフォリオとして、PDCA管理のアプリを作成しました。
- 0.12. ADRパターン
- 0.13. 【PHP】foreach小ネタ
- 0.14. WordPressのAdvancedCustomFieldsにデフォルト値を設定する方法
- 0.15. WordPressでACFデイトピッカーのデフォルト値に現在日付の一カ月後を設定する
- 0.16. PHP8のコンテナでdocker stopしてるのにSIGTERMが送られていない事象について
- 0.17. 12: 値による代入と参照による代入
- 1. 値による代入と参照による代入
【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
【PHP】foreach小ネタ
# コード
“`PHP
1, “name” => ‘Tom’],
[“id” => 2, “name” => ‘Fred’],
];
foreach ($data as [“id” => $id, “name” => $name]) {
echo “id: $id, name: $name”.PHP_EOL;
}“`
# 結果
“`
id: 1, name: Tom
id: 2, name: Fred
“`
WordPressのAdvancedCustomFieldsにデフォルト値を設定する方法
# 実装
左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリックファイルの末尾に以下の内容を追記して保存する
“`php
/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = “★デフォルト値をここに入力★”
return $field;
}// デフォルト値設定を適用する
add_filter(‘acf/load_field/name=my_custom_field_name’, acf_my_custom_field_name_callback);
“``my_custom_field_name`の部分にはご自身で作ったカスタムフィールド名を入れてください。
`close_date`ならば、
`add_filter(‘acf/load_field/name=close_da
WordPressでACFデイトピッカーのデフォルト値に現在日付の一カ月後を設定する
実装しといて何ですが、ボツになったので供養のため残します。
デフォルト値の設定ってこんなめんどくさいことしなきゃいけないんですかWordPressって。左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリックファイルの末尾に以下の内容を追記して保存する
“`php
/**
* 現在日付の一カ月後を文字列で取得
*/
function show_next_month_from_now()
{
$dt = new DateTime();
$dt->modify(“+1 month”);
$date = $dt->format(“Y-m-d”);
return $date;
}/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = show_next_month_f
PHP8のコンテナでdocker stopしてるのにSIGTERMが送られていない事象について
## 概要
PHP8のDockerコンテナに対して
docker stop
や
docker-compose stop
をしてもSIGTERMが送られず
phpスクリプトに記載のシグナル制御がうまく動かなかった。## 原因
利用したDocker ImageにてSTOPSIGNALによりデフォルトのSIGTERMから別のシグナルに変更されていたため。
## 詳細
### Docker Image
https://hub.docker.com/r/phpdockerio/php80-fpm
### docker-compose
“`yml:docker-compose.yml
version: ‘2.0’
services:
app:
container_name: php8
image: phpdockerio/php80-fpm
volumes:
– ./:/var/www/html/
command: php /var/www/html/test.php
“`### test.php
“`php:test.
12: 値による代入と参照による代入
値による代入と参照による代入
これまで、変数とは「値を格納するための入れ物」と説明してきたが、少しだけ嘘が混ざっている。笑
値を格納するのは、厳密にはコンピューター上に用意されたメモリの役割である。
メモリには、それぞれの場所を表す番号(アドレス)が振られている。
しかし、コードに意味のない番号を記述するのでは、見た目もわかりにくいし、タイプミスの原因にもなる。
そこでアドレスに対して、人間が分かりやすいように名前をつけておく。
それが変数の正体である。変数とは、値の格納先(アドレス)に対して付けられた名札と言っても良い。
|メモリ||
|:-:|:-:|
|アドレス| 値 |
|0||
|10|1 `(変数$xはメモリ上のアドレス10に格納)→ $x = 1;`|
|20||
|30|5 `(変数$yはメモリ上のアドレス30に格納)→ $y = 5;`|
|40||
|50||アドレス10から値を取得↓
“`
print $x; →
laravel学んで2か月で自サービスを開発した話 Part9
今までの開発記録はこちらへ
胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
デザイナーに怒ら
composerがウクライナを応援しているのを見つけてみた #StandWithUkraine
ふとcomposer updateしてみたら違和感が・・・。
#StandWith Ukraine
「ウクライナと共に立ち上げれ」的なメッセージが!!どうやら、こちらのIssueでメッセージが表示されるようになったようです。
https://github.com/composer/composer/issues/10582追従するプロダクト出てきそうですね。
# 追記
コミットを見てみたら意外と賛否両論
https://github.com/composer/packagist/commit/86244a3695fcaaac9c5ba4257a4314eae1c6d981#/気軽に手を出してはいけなそうです。
直前のリクエストURLからクエリパラメータを抽出
### リクエストクラスのquery()メソッドと同様の結果にしたい
“`
use Illuminate\Http\Request;
$request->query()
“`array:1 [▼
“email” => “desc”
]
# 直前のリクエストURLからクエリパラメータを抽出
`parse_url(url()->previous())`
laravelヘルパのurl()から直前リクエストのurlを取得後にphpのparse_url関数で以下の形で取得できる
array:1 [▼
“scheme” => “http”
“host” => “http://localhost”
“path” => “/sort/index”
“query” => “email=desc”
]
ここから必要なqueryの値を取得して無理やり「=」で区切り、配列にする
その配列の最初をkeyにして最後をvalueにすることで、query()メソッドと同様にした
“`
$query = exp