- 1. 【Laravel】最短で例外処理のcatchに落とすハゲホゲ
- 2. PHPとイスラエル ←便乗
- 3. プログラミング初学者が1ヶ月で得たスキルとコーディング以外のナレッジ
- 4. カラオケお役立ちアプリ制作記(制作中)
- 5. 例外処理は投球練習
- 6. パスワードのハッシュ化と比較
- 7. PHPでログイン機能
- 8. PHPでユーザー登録
- 9. PHP ログアウト
- 10. PHP 退会機能
- 11. 忘れやすいがよく使う PHPでログを取る方法
- 12. [Laravel]同一モデル間での複数リレーション
- 13. エラー500って何?
- 14. Laravel リレーションテーブルの複数の列に対して、複数キーワードでAND検索をする方法
- 15. バブルソート関数について
- 16. Web監視システムを作ってみた
- 17. PHP の DAO とは
- 18. VaccImage SQLを如何にHTML側に反映させるか
- 19. LaravelでのAmazonSES/SMTP設定
- 20. テスト投稿
【Laravel】最短で例外処理のcatchに落とすハゲホゲ
### 例外処理がちゃんと動くか確認したい
Laravelプロジェクトで開発を進める時に例外発生時に、ログを出したい。Slackに通知したい。メールを送りたい。フラッシュで返したいなど色々なケースがあると思います。
catch側の実装は済んだけど、実際にエラーを発生させて確認したい時どうしましょう。
DBをデッドロックさせますか、環境変数を変えますか、LANケーブル抜きますか。
いやいや、そんなに頑張る必要はないです。### やり方
以下ハゲホゲでめでたしめでたし。“`
try {
$hage = $hoge;
// 処理
} catch (\Exception $e) {
report($e);
// 例外処理
Log::debug(‘hagehoge’);
}
“`
### よくあるミス(?)
エラーは発生しているのに、catchしてくれないぞという時。catchの後のExceptionに
\が抜けていたら、namespaceの問題で以下に直すだけで落ちてくれる可能性が高い。かもしれない。“`
× } catch (Exception e
PHPとイスラエル ←便乗
この記事への便乗です。
– PHPとイスラエル
– https://qiita.com/jkr_2255/items/06f58bef9a9de96b88ba“`
2箇所ほど存在します。
“`3箇所目を紹介。(といっても、もはや昔話ですが)
# calendar モジュール
その昔、C言語文字列リテラルでヘブライ文字をそのまま入れてました。
なお、UTF−8 とかでなく ISO-8859-8 です。“`
/* names for leap (13-month) year */
char *JewishMonthHebNameLeap[14] =
{
“”,
“˙˘¯È”,
“Á˘ÂÔ”,
“ÎÒÏ”,
“Ë·˙”,
“˘·Ë”,
“‡„¯ ‡'”,
“‡„¯ ·'”,
“ÈÒÔ”,
“‡Èȯ”,
“ÒÈÂÔ”,
“˙ÓÂÊ”,
“‡·”,
“‡ÏÂÏ”
};/* names for regular year */
char *JewishMonthHebName[14] =
{
“”,
“˙˘¯È”,
“Á˘
プログラミング初学者が1ヶ月で得たスキルとコーディング以外のナレッジ
# はじめに
・本記事は、プログラミング初学者の私が神戸に来て__取り組んだこと__、そしてその中で__得たこと__をまとめる記事になります。# 取り組んだこと
##### 主に大きく分けて“`4つのカテゴリー“`になります。
>__Potfy.me ( チーム開発 )__
>__Laravel sail ( 個人開発 )__
>__Kobe Engineer’s Lab ( イベント運営 )__
>__Qiita へアウトプット__# 得たこと
### ・ Potfy.me ( チーム開発 )
—
“`Potfy.me では、ユーザー自身のポートフォリオを 「 下書き 」 と 「 公開 」 で保存できる機能を実装しました。また、ポートフォリオの編集画面で 「 下書き 」 「 公開 」 の切り替えをできるようにし、公開タブと下書きタブで表示するポートフォリオの切り替え、ポートフォリオ一覧画面では下書きポートフォリオは非表示の機能も実装しました。“`
公開タブ
![スクリーンショット 2022-01-28 19.32.32.png](https://qiita-
カラオケお役立ちアプリ制作記(制作中)
# 開発環境
– MAMP
– vscode
– Macbook Pro# 利用バージョン
– Laravel Framework 6.20.44
– php 7.4.27#1. プロジェクト作成
プロジェクト作成
`composer create-project –prefer-dist laravel/laravel karaoke_app “6.*”`#2. 認証機能作成
Laravel ui インストール
`composer require laravel/ui:^1.0 –dev`
認証機能周りを生成
`php artisan ui vue –auth`
各種ライブラリをインストールしてビルド
`npm install && npm run dev`
簡易サーバを立ち上げる
`php artisan serve`
認証機能が生成されているか(ポートは環境や設定によって異なるかも)をブラウザで確認
`http://127.0.0.1:8000/`#3. .envの編集
.envファイルを修正“`
APP_NAME=karaoke_app
DB_CO
例外処理は投球練習
# Exception
#### それ程頭が言い訳でもない人がプログラミングを理解する過程を書いてます。
Exceptionは基底クラスで、RuntimeExceptionやlogicExceptionが有り、それぞれ…
いや、分かりにくいな。となったので走り書きではありますがまとめてみた。
別にオブジェクト指向やクラスを理解していなくても読めるのでご安心を。例外処理は、
– データベースに接続した際に接続できなかったり
– バリデーションでエラーが起きているときなどに
こういうエラーが起きてるよ! とエラーの報告をしてもらって、
そのエラーをキャッチすることでどのようなエラーが起きているか探りやすくする仕組みです。“`PHP
try{
//この中に処理を書きます
}catch(Exception $e){
//エラーをキャッチした後に行う処理を書きます
}
“`#### 投球練習
野球だとピッチャーがボールを投げます。
→キャッチャーが受けますコレを例外を投げる
→例外をキャッチする
と置き換えて考えてみる。
パスワードのハッシュ化と比較
ハッシュ化する時→password_hash
ハッシュ化していないパスワードとハッシュ化後のパスワードが同値か調べる→password_verify
PHPでログイン機能
# ログイン機能
1. POSTされてきた値を確認する
2. 変数に格納
3. バリデーション
4. エラーが無ければ例外処理を用いてDB接続
5. SQLを準備(Emailが同じもののpasswordとidを取得する)
6. プリペアドステートメントで値を入れる
7. クエリを投げる
8. ログイン有効期限をセットする(ログイン保持にチェックがあれば30日に延長)
9. ユーザーIDと最終ログイン日時を入れる
10. マイページへ遷移
PHPでユーザー登録
# ユーザー登録の処理フロー
1. POST送信を確認する
2. POST送信されて来た値を変数に代入する
3. 各種バリデーションを行う
4. Email重複チェックはDBに接続し、同じEmailが登録されていないか確認する
4. 例外処理を用いてDB接続する
5. SQLを用意する
6. プリペアドステートメントで値を入れる。現在時刻は`date(‘Y-m-d H:i:s’)`として入れる
5. クエリがきちんと投げられていた場合、ログイン有効期限を1時間にし、最終ログイン日時を現在時刻に更新
6. SessionにユーザーIDや最終ログイン日時・ログイン有効期限を格納する
6. headerでマイページへ遷移
PHP ログアウト
1. session_destroyでSessionIDとそれに紐付くSession変数の中身を削除する
2. loginページへ遷移
PHP 退会機能
SessionにユーザーIDが入ってるので、そのユーザーIDをもとにDBに接続してdelete_flgを1にするだけ。
今回の場合は、user情報・退会するユーザーの登録商品・退会するユーザーのお気に入りを論理削除するので、
3つSQLが必要。
忘れやすいがよく使う PHPでログを取る方法
# ログの設定
`ini_set(‘log_errors’, ‘on’);`
ログを取るか`ini_set(‘error_log’, ‘php.log’);`
ログの出力ファイルを指定するログを吐かせる
`error_log(‘SUCCESS’);`
[Laravel]同一モデル間での複数リレーション
# [Laravel]同一モデル間での複数リレーション
## 何をするか
既にリレーションが出来ているモデル間にもう一つリレーションを足したい## 今回のシチュエーション
| users|
| —- |
| id |
| name || comments |
| —- |
| id |
| user_id |
| mention_user_id |仕事のコード使えないので、まあこんな感じで雑いですけどテーブルがあったとします。ここでcommentsテーブルは、user_idのユーザーによってmention_user_idのユーザーにメンションされたコメントとします。
commentsテーブルのuser_idカラムはもちろんusersテーブルのidカラムと紐付いています。
ここでmention_user_idからもusersテーブルのidカラムとリレーションを紐付けてnameカラムとかを引っ張ってきたいのです。## 方法
結論としては以下です。“`
// Userモデル
public function MentionUserComments()
{
エラー500って何?
オンラインの教材にて「PHP+MySQL(MariaDB)」を学習しているときに遭遇した正体不明の「error 500」。
このページは動作していません
localhostでは現在このリクエストを処理できません。
HTTP ERROR 500という表示が出てしまいました。それを解決するために活躍するのが、
というエラーチェック用のコード。こちらをおそらくエラーを起こしているであろうページに入力(コピペ)してブラウザで実行するとエラーの原因となっている箇所を教えてくれます。
アップデートで使われなくなった記法であったり、記述ミスであったりするのですが、初見では「どこが悪さしているのか分からない」という状況になるため、すぐにでも上記のコードで原因箇所の特定をしたいですね!ではまた!
Laravel リレーションテーブルの複数の列に対して、複数キーワードでAND検索をする方法
### やりたいこと
* Laravelアプリでkeywordによるフィルタ検索をしたい。
* keywordは複数入力可能で、AND検索とする。
* 検索対象の列は、親テーブルの列+子テーブルの列とする。
* keywordに半角スペースが含まれないものとする。⇒keyword検索自体はWEBで調べると出てきますが、複数keywordかつリレーションテーブルレコードの検索パターンが載ってませんでしたので、いろいろ組み合わせてどうにか実装できました。
### 検索例
・parentsテーブル [ parent_id, parent_text ]
・childlenテーブル [ child_id, parent_id(外部キー), child_text ]| parent_text | child_text | keyword1 | keyword2 | Hit |
|:-:|:-:|:-:|:-:|:-:|
| おはよう | おはようございます | おはよう | ございます | 〇 |
| おはよう | おはようございます | おはよう | こんにちは | ×
バブルソート関数について
#この記事を書いた理由
ソート関数を使わずに配列の要素を昇順、または降順に並べ替える関数をつくる際、
「バブルソート関数」というロジックがとてもクレバーだったので備忘録として残しておく。#コード
“`main.php
Web監視システムを作ってみた
# パブロフの犬
今月、証明書の更新を忘れており、4日もの間Webサイトが停止した.
次からはすぐに知れるようにWebサイトを監視する仕組みを考える.# 設計と技術選定
仕組みを考えるにあたって重要と考えることは設計と技術選定だ.
結果、①Webページを確認し②確認結果をSlackに通知する仕組み.
![イメージ.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067041/0ea5b95b-cbc8-bac4-0c4e-e1cf6de418bd.png)
結果、技術にはJavaScriptとPHPを選択.
| 言語 | ライブラリ | 利用目的 |
| :—: | :—: | :—: |
| JavaScript | yarn | JSライブラリ管理 |
| | Selenium | テストフレームワーク |
| | Mocha | テストフレームワーク |
| PHP | Composer | PHPライブラリ管理 |
| | FastRouter |
PHP の DAO とは
## 勉強前イメージ
読むときは正直よくわからんで見てた。
クラスとかまとまってるイメージ?## 調査
### PHP の DAO とは
Data Access Object の略で、デザインパターンの一種になります。
データベースでアクセスする際のロジックを集約したクラスのことです。
業務ロジックとデータを取得するのを分離するために考えられました。
要するにデータベースへのアクセスはDAOを使用して行われています。また、DAOのクラスはテーブルごとに作成するようです。
そのためSQLを変更する際はDAO見たら一覧で確認することができますが
複数クラスから参照されている場合影響範囲の調査が難しいところがあります。## 勉強後イメージ
DAOを変えるだけで変更できるのは楽よね。
DBに接続する際はDAOを書かないといけないのか。## 参考
– [DAOの悪夢 – PHPでデータベースを扱う(1)](http://blog.tojiru.net/article/273342235.html)
– [【PHP】DAOとはなにか](https://forse.hate
VaccImage SQLを如何にHTML側に反映させるか
今回は、部署の入力ページについて。
患者さん、職員、職員家族などの分類のみならず。
外来なのか、入院ならどこの病棟なのか、どこの部署の所属職員なのか。
`分類`というものが必須です。
そこで、下記を作りました。“`
CREATE TABLE departments (dpts_symbol VARCHAR(120) NOT NULL,
dpts_name VARCHAR(120) NOT NULL,
PRIMARY KEY(dpts_symbol));
“`簡単ですね。
部署のシンボルをプライマリーキーにしました。
患者登録のページから、当然ながら患者のみならず職員について、部署を入れないといけませんよね。
部署については、下記SQLにあります。“`
select * from departments;
+————-+———–+
| dpts_symbol | dpts_name |
+————-+———–+
| gairai | 外来 |
| k
LaravelでのAmazonSES/SMTP設定
# 経緯
LaravelからAmazon SESへの接続がタイムアウトしたりエラーになって試行錯誤したときのメモです。
環境は下記の通り。SESはAPI経由でもよいですが、ひとまずSMTPで設定してみることにしました。– 基盤構成: EC2 → Amazon SES
– PHPフレームワーク: Laravel 8.x# 試行錯誤してるときに出たエラーたち
いずれもポートの設定などを誤っているために出力されていたものです。“`
(Swift_IoException(code: 0): Connection to tcp://email-smtp.ap-northeast-1.amazonaws.com:465 Timed Out at /***********************/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php:166
“`“`
ERROR: Expected response code 220 but got code “”, with me
テスト投稿
#Markdownの練習
“`php:php
“`
[KEILOG](https://keislog.com/)