- 1. Illuminate\Http\Requestについて雰囲気でやっていたので個人的にメモした
- 2. 繰り返し処理【PHP】
- 3. Laravelのselectフォームでoption hiddenを利用した時のvalidationについての忘備録
- 4. 【Docker + Laravel】WebPushでプッシュ通知機能作成中のエラー 【WebPush gmp extension is not loaded but is required for sending push notifications with payload . You can fix this in your php.ini】
- 5. 【Laravel-Excel】Laravelでエクセルファイルを操作する
- 6. 各種言語におけるINIファイルのエラー扱い
- 7. [Laravel] FormRequestまとめ
- 8. 【PHP学習_備忘録】 フォームデータを配列で受け取る,クロスサイトスクリプティングとは
- 9. 【Laravel】php artisan serveで起動できない
- 10. 連想配列について
- 11. クライアントとサーバーでタイムゾーンを合わせる3つの方法
- 12. Laravel入門メモ
- 13. PHP8 で phpQuery を使う
- 14. 【初心者向け】ローカル変数とグローバル変数
- 15. LINE notifications channel for Laravel を作ってみた
- 16. Debian 11 にPHP 7.4 をインストール(OS標準)
- 17. 「::class」ってなにしてるの?
- 18. Add [ foo ] to fillable property to allow mass assignment on [ foo ].
- 19. 大量のデータ(最大10万)から値を検索 指定要素の検索 (query)
- 20. Laravel で FormRequest をテストする方法
Illuminate\Http\Requestについて雰囲気でやっていたので個人的にメモした
Controller内でRequestをいい感じに使えることができるように諸々まとめた
## リクエストされたURLを知りたいとき
クエリ文字列が必要ない場合は、以下“`
$url = $request->url();
“`クエリ文字列が必要な場合は、以下
“`
$urlWithQueryString = $request->fullUrl();
“`パスのみが必要な場合は、以下
“`
$uri = $request->path()
“`## リクエストされたURL/メソッドによって処理を分けたいとき
“`
if ($request->is(‘admin/*’)) {
// 処理
}
“`名前付きルートに一致するか確かめるときは、以下
“`
if ($request->routeIs(‘admin.*’)) {
// 処理
}
“`リクエストメソッドが知りたいときは、以下
“`
$method = $request->method();
“`リクエストメソッドが指定のものか知りたいときは、以下
“`
繰り返し処理【PHP】
こんにちは
PHP初心者です。
今回は繰り返し処理についてメモしていきます!# while
while構文はある条件が満たされるまで
処理を繰り返すことができます。書き方としては
“`
初期化処理
while(繰り返す条件) {
繰り返したい処理
更新処理
}
“`
というカンジで例を出すと、
以下のような記述になります。“`php
$i = 1;
while ($i <= 100) { print($i . "\n"); $i += 1 } ``` 初期化処理は```$i = 1```にあたります。 変数iに1を代入したんですね。 繰り返す条件は```($i <= 100)``` これは$iが100以下であれはtrueとなり、 中かっこ{}の中身の処理を行います。 処理が行われる順番としては 1. $i = 1を定義 2. ($i <= 100)がtrueかどうか判断 3. 2がtrueになるのであれば、$iの値を出力 4. $iに1を加算 この順番で$i =100になるまで繰り返されます。 比較演算子<=が出てきたのでごめん
Laravelのselectフォームでoption hiddenを利用した時のvalidationについての忘備録
##バリデーションで実現したい事
フォーム内のselectで選択されずに(option hiddenの項目が選択されたまま)submitされた時、
バリデーションエラーにする。今回は「会社」を登録する時の情報のうち
住所の「都道府県」をselectから選択するようにした。“`php:corp/create.blade.php
//省略//都道府県データ
//$prefs =[‘北海道’,’青森県’,’岩手県’・・・・];
“`上記のような場合、selectで「都道府県」は選択出来ないようになっているが
選択しないまま送信すると「都道府県」がvalueとなって送信されて、
requiredのバリデ
【Docker + Laravel】WebPushでプッシュ通知機能作成中のエラー 【WebPush gmp extension is not loaded but is required for sending push notifications with payload . You can fix this in your php.ini】
## はじめに
突然ですが、、、、
アプリケーションにメッセージのポップアップ通知機能を実装することになりました。実装したい機能のイメージはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594063/282c74f2-2ba3-0027-4750-d6de7759f266.png)
(Gigazine様の記事から引用させていただきました。)
画像引用元:[Google ChromeがMac OS Xでネイティブ・プッシュ通知に対応](https://gigazine.net/news/20160407-chrome-native-push-notifications-mac/)“Google Chrome“使ってると出てくるアレです。
嫌いな人が多いのではないでしょうか。
通知自体を切ってる人が結構多いイメージです。今回はそんな~~嫌われ者の~~こいつを実装したいので早速方法を調査しました!
## 実装
ネットの海を調べ
【Laravel-Excel】Laravelでエクセルファイルを操作する
## 背景
Laravelにはエクセルファイルを簡単に操作できる[Laravel-Excel](https://laravel-excel.com/)というライブラリがあります。
このライブラリの記事はたくさんありますが、Githubのリポジトリやテストなどのサンプルコードがあるものが少なかったのでメモ
すべてのコードは[Githubのリポジトリ](https://github.com/yasuaki640/laravel-excel-sample)にpushしてあります。
### 諸注意
サンプルコードは簡便のため、層の分離等は行っておらず若干ファットコントローラーになっています。
## インストール
### 環境
– Laravel 8.x
– PHP 8### Laravelインストール
[docker-laravel](https://github.com/ucan-lab/docker-laravel)というLaravelアプリを簡単に用意できる環境があるのでこちらを`clone`する。
READMEにしたがって環境を立ち上げる。
### ライブラリ
各種言語におけるINIファイルのエラー扱い
INIファイルを間違って編集したことで、システム障害に至るケースに遭遇したので、これを期に自分が仕事で良く使っている言語におけるINIファイルのエラーの扱い方についてまとめた。
なお、現在INIファイルは https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB によれば、規格化/標準化されていないらしい。# 調査対象言語
Windows上で以下の言語とWin32 APIについて調査した。
|言語とバージョン |ライブラリや関数 |
|—————————-|———————–|
|PHP 7.4.22 (x64) |parse_ini_file |
|Strawberry Perl 5.32.1 (x64)|Config::Tiny |
|Python 3.7.9 (x86) |ConfigParser |
[Laravel] FormRequestまとめ
#はじめに
基本含め、現場でよく使う関数をまとめたいと思います。
Laravelのバージョンは7.30.4です。#目次
* rules()
* attributes()
* messages()
* validationData()
* prepareForValidation()
* replace()
* merge()
* withValidator()#rules()
**バリデーションルールを定義する**関数です。
“`php:app/Http/Requests/Example.php
public function rules()
{
return [
‘name’ => ‘required|max:30’,
];
}
“`“`html
“`name属性の値である”name”フィールドに対して
* 必須(required)
* 最大30文字(max:30)というバリデーションルールを定義しているということになります。
##attri
【PHP学習_備忘録】 フォームデータを配列で受け取る,クロスサイトスクリプティングとは
##はじめに
本記事でやること
・フォーム入力用のHTML画面を簡単に作って、フォームデータを受け取るプログラムの作成
・エスケープ処理とは
・【セキュリティ】 クロスサイトスクリプティングとは##フォームデータを受け取るプログラム
“`html:html
Document
“`“`ht
【Laravel】php artisan serveで起動できない
###環境
OS: Windows10
“`
chocolatey -v
0.10.15composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.1.6 2021-08-19 17:11:08php -v
PHP 8.0.9 (cli) (built: Jul 29 2021 14:12:27) ( NTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologie
連想配列について
# PHP初心者
こんにちは!
Ruby on Railsによるオリジナルアプリケーションが落ち着いたので
他の言語を学びたいなあと思いPHPを勉強中です。
まだまだPHP初心者なので、メモ用として
投稿してみました。# PHPの配列の記述法
“`php
$shaman = [“五条悟”, “七海健人”, “歌姫”];
“`基本的にRubyの配列記述法とあんまり変わらないですね。
異なるのはPHPにはもう一つ記述法があるみたいです。“`PHP
$shaman = array(“五条悟”, “七海健人”, “歌姫”);
“`
こちらはPHPのバージョン4.5以前で使われる記述の仕方みたい。
一つ目の配列の書き方は比較的新しい書き方らしいんやが、
近年のWebサーバーではほとんど使えるから記述が短くなるなら
一つ目の書き方がいいですね。Rubyの時と同じく配列には添字が0始まりで付与されているので
下記のように入力すると“`php
$shaman = [“五条悟”, “七海健人”, “歌姫”];
print($shaman[0]);
“`![
クライアントとサーバーでタイムゾーンを合わせる3つの方法
## 目次
1. あらかじめユーザー設定で登録したものをデータベースから取得する
2. フォームで選択させて送信する
3. JavaScriptで取得して送信する## あらかじめユーザー設定で登録したものをデータベースから取得する
ユーザー設定にタイムゾーンの設定を設け、ユーザーに紐付けて保存します。
Carbon::parse($request->date, $user->timezone)
PHPの場合は以下の関数で取得します。
timezone_identifiers_list(\DateTimeZone::ALL)
セレクトボックスを用意すると良いでしょう。
@foreach (timezone_identifiers_list(\DateTimeZone::ALL) as $timezone)@endforeach
## フォームで選択させて送信する
日時を送信するフォームにタイムゾーンの入力
Laravel入門メモ
#項目
1. アプリケーション用のディレクトリを作成
1. Webサーバの起動確認
1. `view`をいじってみる
1. DBとの接続設定
1. DBを操作する為の`モデル`,`コントローラ`,`マイグレーション`ファイルを作成
1. ルーティングの設定
1. DBから持ってきたデータをテンプレートへ送る
1. 特定のデータをDBから取得する#1. アプリケーション用のディレクトリを作成
作業ディレクトリ内にlaravelアプリケーション作成用のディレクトリを作成する。“`bash;
$ laravel new laravel_test
“`
これで配下に`laravel_test`が作成される。#2. Webサーバの起動確認
Webサーバが起動するか確認をして、laravelが正常に動いていることを確かめる。“`bash:
$ cd laravel_test
$ php artisan serve
“`#3. `view`をいじってみる
`resources/views/welcome.blade.php`が前項で表示されたテンプレート。
この中身をいじ
PHP8 で phpQuery を使う
### すぐ出るエラー おそらくPHP7以上 の対応
“`
Compile Error – Array and string offset access syntax with curly braces is no longer supported in APPPATH/vendor/phpQuery-onefile.php on line 2156
“`エラーの通りソースコードを修正
2156行と2171行のエラーを修正 {数値} を [数値] へ
修正前“`php
// 2156行
if ($param{0} == ‘n’)// 2171行
else if (mb_strlen($param) > 1 && $param{1} == ‘n’)
“`修正後
“`php
// 2156行
if ($param[0] == ‘n’)// 2171行
else if (mb_strlen($param) > 1 && $param[1] == ‘n’)
“`## この後に出るエラー
修正してもこういうエラーが出ます。
“`
phpQuery-o
【初心者向け】ローカル変数とグローバル変数
今回も初心者向けに分かりやすく書いていきたいと思います!!
#変数とは
数値や文字列などのデータを格納するための箱のようなもの。
この変数という箱にデータを入れておくことで、あとから必要な場所で格納したデータを利用することができます。#ローカル変数とは
関数の中で宣言した変数で、決められた範囲内(原則その関数内)でしか参照することができません。“`php:php
“`#グローバル変数とは
関数の外部で宣言した変数で、プログラムのどこからでも参照することができます。
グローバル変数を関数の中で使いたいときは、関数内に「global $変数名 ;」と記述して、グローバル変数を宣言しなければなりません。“`php:php
“`#おわりに
一般的にはロー
LINE notifications channel for Laravel を作ってみた
# 経緯
[LINEのプッシュ通知](https://developers.line.biz/ja/reference/messaging-api/#send-push-message)をLaravelで実装しようと思って調べてみたら、[コミュニティが提供している通知チャンネル](https://laravel-notification-channels.com/about/#suggesting-a-new-channel)の中にLINE通知がなかったため、自分で作ってみました。
(LINEの国外ユーザ数を考えれば、提供されていないのは当然かもしれませんが、、)# 環境
* PHP 8.0.9
* Laravel Framework 8.51.0# 前提
* [LINE Messaging API](https://developers.line.biz/ja/docs/messaging-api/getting-started/)でチャネルを作成していて、`Channel access token`と`Channel secret`を持っている
* LINEの`use
Debian 11 にPHP 7.4 をインストール(OS標準)
# はじめに
Debian11にPHPを標準インストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)## LOG
### インストール
“`shell-session
# cat /etc/os-release
PRETTY_NAME=”Debian GNU/Linux 11 (bullseye)”
NAME=”Debian GNU/Linux”
VERSION_ID=”11″
VERSION=”11 (bullseye)”
VERSION_CODENAME=bullseye
ID=debian
HOME_URL=”https://www.debian.org/”
SUPPORT_URL=”https://www.debian.org/support”
BUG_REPORT_URL=”https://bugs.debian.org/”# apt update;apt install -y php
… 略
“`### 各
「::class」ってなにしてるの?
phpで開発中になんとなく`::class`を使っていたけど、ちゃんと挙動を理解していなかったのでまとめる。
## 公式を見る
> ::class
> class キーワードでもクラス名の解決を行うことが出来ます。 クラスの名前が ClassName になっているクラスの完全修飾名を取得するにはClassName::class を使います。 これは、名前空間付きのクラスに使うと特に便利です。
>
> 例14 クラス名の解決> “`php
> namespace NS {
> class ClassName {
> }
>
> echo ClassName::class;
> }
> ?>
> “`
> 上の例の出力は以下となります。
>
> “`
> NS\ClassName
> “`引用元: https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.class.class
クラスを指定する時にいちいち長ったらしい、名前空間
Add [ foo ] to fillable property to allow mass assignment on [ foo ].
# Laravel Breezeにてregister時にエラー
## 背景
認証機能をLaravel Breezeで作成したところregister保存時にエラーが出る。## 内容
![スクリーンショット 2021-08-21 17.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557084/f954c7b5-2410-18e9-514b-7ba35a621eb7.png)## エラーが示す意味
“どこのカラムに保存したらいいかわからない”という意味らしい。## 解決法
app > Models > foo ファイルにホワイトリストを追加。“`foo.php
@var arrayprotected $fillable = [
‘name’,
‘email’,
‘password’,
];
“`## 参考
– https://qiita.com/hitochan/items/8200ee440d5923f
大量のデータ(最大10万)から値を検索 指定要素の検索 (query)
# はじめに
Paiza問題集の問題です。問題は以下のものです。
[指定要素の検索 (query) ](https://paiza.jp/works/mondai/query_primer/query_primer__multi_search)※注意:内容の正しさに関しては保証できないので参考程度に
# 問題
Dランク問題であるため、実装内容自体はかなりシンプルなものですがデータ量が各10万まであるという問題です。レートは2000くらい。> 〇問題文
長さ N の重複した要素の無い数列 A と Q 個の整数 K_1 … K_Q が与えられるので、
各 K_i について、 A に K_i が含まれていれば “YES” を、そうでなければ “NO” を出力してください。***入力される値***
“`
N Q
A_1
…
A_N
K_1
…
K_Q
“`> ・1 行目では、配列 A の要素数 N と検索する値の個数 Q が半角スペース区切りで与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。
・続く Q 行では、検索する値 K
Laravel で FormRequest をテストする方法
## この記事について
表題のとおりですが、FormRequest に対するテスト方針もあわせて記載し、備忘録的に記録しておきます。
## はじめに
### 前提となる方針
方針としては、コストとベネフィットをバランスして自分で決めたガイドラインです。所属するチームやプロダクトによっては多少変えることもあります。
– バリデーションルールが単純なケースでは FormRequest に対するユニットテストは書かずにフィーチャーテストでのみ確認する
– 複雑なカスタムバリデーションルールがある場合は Rule に切り出し、Rule に対するユニットテストを書いて確認する
– after コールバックを使うときは FormRequest に対するユニットテストを書いて確認するafter コールバックを使わざるを得ないケースというのは、特定の入力パラメータに対するバリデーションではなく、複数だったり全体だったり、というケースです。
### 環境
– PHP: 8.0.2
– Laravel: 8.55.0Laravel のバージョンに関しては、調べてないですが、上記未満で