- 1. XSERVERにlaravelのwebアプリをgitからデプロイ
- 2. 実務4年目のWEBエンジニアが「PHP本格入門(下)」を読んで学んだこと 12選
- 3. Generatorを使って配列をコンソールに出す処理を書く
- 4. LaravelとMySQLの接続詰まったところ
- 5. 【メモ】Laravelのオートロードの仕組みについて学ぶ
- 6. Symbol(XYM) の価格表示をする WordPress プラグイン
- 7. ストラテジーパターンって何?
- 8. CakaPHP4でユーザ追加時に関連するテーブルも同時に追加を行う方法
- 9. 【Laravel】EloquentCollectionにてネスト先カラムをGroupByする
- 10. Laravelで特定のホストでリクエストが来た時しか発動しないrouteを作って管理画面の認証画面すらも隠蔽してみる
- 11. 【PHP】Google Analytics APIでレポートデータを取得したい!
- 12. [Drupal]PHPの設定を変更する
- 13. EC2にLaravel+MySQL環境構築
- 14. 自分用メモ: empty可変長引数Ver.
- 15. Valitron
- 16. 【PHPUnitエラー】Maximum retries of 10000 reached without finding a unique value
- 17. 【PHPUnit】Factoryのstateを使ってテストデータを作成する
- 18. 【PHP】phpのコールバック関数、無名関数なぐり書き
- 19. 名前空間に関して勉強したことをまとめていく①
- 20. PHPのdisable=disableについて
XSERVERにlaravelのwebアプリをgitからデプロイ
この作業が何回やっても慣れず、自分の備忘録的な意味も含めて書かせていただきました。
もしよければ参考にしてみてください。## SSH接続
初期設定の部分は簡単なので飛ばしますログインコマンドはこちらです
“`
ssh -l サーバーID -i ~/.ssh/サーバーID.key サーバーID.xsrv.jp -p 10022
“`## PHPのバージョンアップ
#### 1 , 現在のバージョンを確認
LaravelにはPHPのバージョンが7以上であることを要求されています。
まずは以下のコマンドを実行してphpのバージョンを確認してみます。
“`
php -v
“`
laravel8.*を使うときはバージョンが7以上
laravel9.*を使うときはバージョンが8以上であれば、そのままでも大丈夫です。#### 2 , バージョンアップ
では、実際にphpのバージョンを変更していきます。
まずはHOME直下にbinディレクトリを作成します。“`
mkdir $HOME/bin
“`下記コマンドを実行すると使えるバージョンが表示されます。
“`
実務4年目のWEBエンジニアが「PHP本格入門(下)」を読んで学んだこと 12選
## はじめに
今回は「__実務4年目のWEBエンジニアが「PHP本格入門(下)」を読んで学んだこと 12選__」というテーマでお伝えします。
PHP本格入門(下)(以下、本書)
https://gihyo.jp/book/2020/978-4-297-11470-1
本書を手に取った経緯などは、下記記事をご参照ください!
https://qiita.com/Yazmatto/items/90f854e11a5b3cd88999
それでは、本題です。
ここからは、本書を読んで学んだこと 12選をお伝えしていきます。
## 結論
私が本書を読んで学んだことは、以下の通りです。
:::note
学んだこと 12選
1. クラスの関係性を表すキーワード
1. 神クラス(アンチパターン)
1. なんでもpublicなクラス(アンチパターン)
1. クラスに動的にアクセスする方法
1. イテレータを使用した繰り返し処理
1. ジェネレーター
1. メソッドチェーンに対応したクラスの作り方
1. HTMLおよびJavaScriptのコメントには注意する
1. セキュリティリス
Generatorを使って配列をコンソールに出す処理を書く
## 概要
再帰的に配列を作成し返す関数とGeneratorを返す関数を書き、その違いを見比べてみます。
## 経緯
任意の配列をコンソールに出す処理を書いていました。
始めは直接ループ内で出力していましたが、非常にテストしづらいので、先に出力する文字列の配列を全部作成してから一気に出力しようと考えました。
そこで、大きい配列を出力するためだけに同じような(あるいは大きい)配列を作成し、メモリを使うのは勿体無いので、Generatorを使って書くに至りました。
恥ずかしながら、Generatorは今まで使った事が無かったのですが、ちゃんと書いてみると配列バージョンとGeneratorバージョンの書き方の対応がよく分かったので、メモがてら残そうと思った次第です。## コード
### 配列を作成し返す場合のコード
“`php
/**
* 配列を表示するための文字列を取得する
*
* @param array $data
* @return array
*/
function getOutputStr_Array(array $data, int $de
LaravelとMySQLの接続詰まったところ
# Laravel詰まったところ
## おそらく当たり前のことだけどわからなかったのでメモしておく
## php artisan migrationでのエラー
### .envで、DB_DATABASE=homestead, DB_USERNAME=homestead, DB_PASSWORD=passに設定したときやっておかなければならないこと。
### MySQLにログインする(各人で異なると思うが、私は[mysql -u root]でログインできたぁ)、そんでまずはhomesteadのデータベースを作成、次にhomesteadという名のユーザーをpassというパスワードで作成、最後にhomesteadユーザーにhomesteadデータベースの権限を付与する。
### 上記ができたら、[php artisan migration] を実行する。
### それでうまくいったら、mysqlにログインする。[mysql -u homestead -p] Enter passwordと出るので[pass]と入力する。
### MariaDB[none]> でるので[connect home
【メモ】Laravelのオートロードの仕組みについて学ぶ
PHPを初めて触り、Laravelを勉強しているのですが、オートロードという機能を目にして便利だけどなんで機能しているのか全く分からない状態でした。
今回はそんなオートロードについてちゃんと調べました。
最初はLaravelがそういう機能を提供しているのかな?とか思っていたら、いやいや機能を実現するためにファイルを作ったのはComposerだよとなり、実際にComposerによって作成されたファイルを見てみたらPHPで記述されていて、更に見てみたらPHPの標準としてオートロード機能を実装するための関数が用意されていたという話です。# Laravelにおけるオートロードとは
オートロードを実施しない場合、クラスをインスタンス化したりするときには、クラスが定義されているファイルをrequire等で読み込んでからインスタンス化をすると思います。
オートロードでは名前空間+クラス名と、そのクラスが実際に記述されているファイルとを紐づけます。そうすること、インスタンス化するときなどに名前空間が分かるように記述すればで自動でファイルを読み込んで使用できるようにしてくれます。
何がありがたいかと
Symbol(XYM) の価格表示をする WordPress プラグイン
# まえがき
Symbol コミュニティは今、phpにつよいエンジニアを探しています!
【募集】
そろそろPHPで(特にWordpressで)Symbol使いたいという要望が増えてきました。
PHPの開発経験がある方は一度Discord「NEM Japan UserGroup」にご参集いただけますでしょうか??♂️https://t.co/pftIkRam56— XEMBook@symbol? (@xembook) May 12, 2022
ストラテジーパターンって何?
## そもそも
>デザインパターンとは、様々なプログラムで再利用できる汎用的な設計パターンのことです。 プログラマの世界では、様々なデザインパターンが知られていますが、その中でも特に有名なのが「GoFデザインパターン」です。https://xtech.nikkei.com/it/article/COLUMN/20051123/225074/#:~:text=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%A8%E3%81%AF%E3%80%81%E6%A7%98%E3%80%85,%E3%80%8CGoF%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82
ある問題があって、こう言うときはこんな設計をすれば良いよね。
みたいなのがデザインパターンのイメージ。## Wikiで調べてみた
>Strategy
CakaPHP4でユーザ追加時に関連するテーブルも同時に追加を行う方法
# はじめに
実務でCakePHPを使って社内業務用のWEBアプリケーションを開発しました。
その際、細かい仕様の部分を悩みながら開発を進めたので、共有させていただきたいと思います。
(※ 実務で開発した内容そのままではなく、公開できるように内容を修正しております。)# 開発環境
Mac Monteray 12.2.1
CakePHP 4.3.7
PHP 7.4.2
MySQL 5.7.26# 本記事記載内容
ユーザ追加時に、ユーザのテーブルだけではなく、関連するその他のテーブルに関しても更新を行う、という方法について記載いたします。
所々解説用にXdebugのスクリーンショットを記載いたします。# DB設計
### ER図
### 補足
本記事ではusers, affiliation_committees, comm
【Laravel】EloquentCollectionにてネスト先カラムをGroupByする
## はじめに
そもそも1カラムに複数値を持たせるのはどうかという点は置いといておいて、、、。
何らかしらのレスポンスデータをログとしてそのまま格納したい場合などあると思います。
こちら調べてもあまり記事がなく、もしかしたらやりたい人がいるかな~と思いメモとして記事に残しておきます。## 要件
Jsonがそのまま入ったカラムにて、Jsonのキーでグルーピングしたい## 結論
```php
// ドット「.」でつなげる
$collection->gropuBy('xxx.xxx');
```## 検証内容
### テーブル構成
```php:migration.php
Schema::create('conversions', function (Blueprint $table) {
$table->id();
$table->json('meta');
$table->timestamps();
});
```
### データ
|id| meta | created_at | updated_at|
|:-------
Laravelで特定のホストでリクエストが来た時しか発動しないrouteを作って管理画面の認証画面すらも隠蔽してみる
趣味で作っているLaravelのアプリケーションで管理画面だけ通常のサービスを提供しているホストは全く別のIdentity-Aware Proxyで保護されたホストで配信して、一般のユーザから `/admin/` を叩かれても応答を返さないことで管理画面の認証画面すらも隠蔽したくなったのでその方法を紹介したいと思います。
## 早速route middlewareを作る
名前は何でも良いので早速route middlewareを作りましょう。```php:app/Http/Middleware/CheckRestrictedRouteHost.php
【PHP】Google Analytics APIでレポートデータを取得したい!
最近めっきりAPIからは遠ざかっていたのですが、
久しぶりに運用担当さんから連絡が来ました。
曰く「**Google Analyticsのレポートを自動化したい**」とのこと。ヤッホーーーイ!!
最近バージョンアップとかしかなくて退屈してたんだよね!(違う)
ということで、今回挑むのはGoogle Analytics APIです。
例によって「(意地でも)**サンプルを使わずにデータを取る!**」方式により
頑張っていきたいと思います。毎度の繰り返しになりますが、
Googleは「サンプルプログラムを使ってやってね!」を推奨しているので
なにかあっても自己責任でお願いします!**っていうかアナリティクスってなに!?**
正直あまり馴染みがないのですが・・・まあなんとかなるか。なるか・・・?# Google Analytics APIとは
Google Analyticsとは、天下のGoogleさんが提供しているアクセス解析ツールです。
当然のことながら無料。さすがぐーぐるさんですね。Analyticsを利用すると、サイトにどのくらいアクセスが来ているか、
リア
[Drupal]PHPの設定を変更する
PHPのメモリ容量などphp.iniに書かれている情報はsettings.phpに以下のような行を追加することで編集できます。
```php
ini_set('memory_limit', '256M');
```他には
- php.ini
- .user.ini
- .htaccess
を編集する方法もあります。詳しくはこちらをご覧ください。https://www.drupal.org/docs/7/managing-site-performance-and-scalability/changing-php-memory-limits
EC2にLaravel+MySQL環境構築
# はじめに
EC2にLaravelをインストールし、
すでに作成済み(githubやcodecommitなど)のプロジェクトを展開する方法です。※バージョンなどは古い場合があります。
# 開発環境作成
#### 必要なものをインストール
ec2-userで作業します。**httpd** をインストール。
```
$ sudo yum -y install httpd
```**git** をインストール。
```
$ sudo yum -y install git
```**PHP** をインストール。(バージョンは任意)
```
$ sudo amazon-linux-extras enable php7.4 -y
``````
$ sudo yum clean metadata
``````
$ sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
```問題なくインスト
自分用メモ: empty可変長引数Ver.
## まえがき
`isset()`は可変長引数対応なのに`empty()`は対応してない!どうして!と思ったので。
n番煎じだったらゆるして## コード
```php:function_emptyAny.php
function emptyAny(mixed ...$vars) {
foreach ($vars as $v) {
if (empty($v)) return true;
}
return false;
}
```## あとがき
`emptyAny()`は引数のうち一つでも空のものがあれば`true`、すべて格納されていれば`false`を返す。
アンケートフォームのサーバーサイドバリデーションにつかいました!!!## コメントより
コメント欄に`array_filter()`使ったもっと便利な方法あるから見て!!!ありがとうございます!!
Valitron
# Valitronとは
PHPのバリデーションライブラリです。
問い合わせフォームを作る# インストール
```
$ composer require vlucas/valitron
```# valitron導入
valitronの書き方です。```_function.php
function fields()
{
// Change array here accordingly to the 's name attribute.
// _token should always be available.
return [
'_token', 'name', 'mail', 'detail' //nameなどを定義
];
}/**
* Validate the message.
*
* @return Validator
*/
function validate($data)
{
$validator = new Validator($data);$va
【PHPUnitエラー】Maximum retries of 10000 reached without finding a unique value
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 状況
factoryをいくつか作成すると下記のエラーが出た。
このエラー文でググっても原因が分からず、解決に時間がかかったので備忘録とする。
```
Maximum retries of 10000 reached without finding a unique value
``````php
class CampanyFactory extends Factory
{
public function definition(): array
{
return [
'name' => $this->faker->company(),
'domain' => $this->faker->unique()->safeEmailDomain(),
];
}
}
```## 原因
```safeEmailDomain()```は```example.com, example.net, example.org```をランダムで出してくれるfakerだが、
今回
【PHPUnit】Factoryのstateを使ってテストデータを作成する
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 前置き
テストデータの一部を変更して使いたいとき、下記のように書くこともできるが
RSpecで使われるFactoryBotのtraitのように便利に書けるものがないか調べたらあった。```php
Task::factory()->create([
'status' => 'done',
]);
```
## Factoryのstate
ファクトリの状態を一部変更してテストデータを作成できる。
Laravel8から使える。```php
class TaskFactory extends Factory
{
...
public function done(): TaskFactory
{
return $this->state(function (array $attributes) {
return [
'status' => 'done',
];
});
}
}
```
テスト内で下記のように定義して使える。```php
【PHP】phpのコールバック関数、無名関数なぐり書き
# コード
```PHP
15,
'user2' => 3,
'user3' => 20,
'user4' => 8,
'user5' => 5
];
$result = check_array($before,function($v){
return $v % 3 === 0;
});function check_array($before,$callback){
$after = [];
foreach ($before as $key => $v){
if($callback($v)){
$after[$key] = $v;
}
}
return $after;
}
var_dump($result);
```# 結果
```
array(2) {
["user1"]=>
int(15)
["user2"]=>
int(3)
}
```
名前空間に関して勉強したことをまとめていく①
## 名前空間の概要
- namespaceは名前空間とも呼ばれ、項目をカプセル化するときに使用します。
- 名前空間とは、例えば通常同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。
- そのため、名前空間を指定しておけば自分が作ったクラスが、サードパーティのクラスや関数などと名前が衝突することを防ぐことができます。```A.php
PHPのdisable=disableについて
# disable =disableについて
disabled属性は指定した要素を無効化する役割があるみたいです。```php
```
disabled と指定してもいいみたいです。
要素が無効化されると、ボタンは押せなくなり、テキストは入力できなくなり、選択ボックスは選択できなくなります。# 追加事項
```
= htmlspecialchars($input['name'] ?? '') ?>
```
はXSS攻撃対策で使うもので、inputの名前がnullなら空で配列を返す意味みたいです。# 参考資料
https://www.tohoho-web.com/html/attr/disabled.htm