質問編集履歴

7

書式の改善

2025/01/01 03:58

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -50,9 +50,8 @@
50
50
 
51
51
  ### 改善案?
52
52
  そしてもしわざわざ `throw` などしない方がいいとなると、
53
- 上記 `throwIfExistsLibraryTag()` `insert()` でなく
53
+ 上記 `throwIfExistsLibraryTag()`, `insert()` のコンビ (既存なら `throw` する) でなく
54
- 下記 `selectOrInsert()` `wasInserted()` によって
54
+ 下記 `selectOrInsert()`, `wasInserted()` のコンビ (既存なら `'exists'` を返す) で良いですか?
55
- 既存だったら `'exists'` を返すような実装で問題なさそうでしょうか?
56
55
 
57
56
  ```php
58
57
  final class LibraryTagController extends Controller

6

書式の改善

2025/01/01 00:45

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -88,8 +88,8 @@
88
88
  ```
89
89
 
90
90
  ### 求めるご意見
91
- - `throw` すべき。だって⭕⭕だから。
91
+ - `throw` すべき。だって▲▲だから。
92
- - `throw` しない。だって❌❌だから。
92
+ - `throw` しない。だって■■だから。
93
93
  のように、ご経験をふまえての理由も教えて頂けると幸いです。
94
94
 
95
95
  よろしくお願い致します。

5

書式の改善

2025/01/01 00:42

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -49,7 +49,10 @@
49
49
  ```
50
50
 
51
51
  ### 改善案?
52
+ そしてもしわざわざ `throw` などしない方がいいとなると、
53
+ 上記の `throwIfExistsLibraryTag()` と `insert()` ではなく、
54
+ 下記の `selectOrInsert()` と `wasInserted()` によって
52
- そしてもしわざわざ `throw` などしない方がいいとなると、下記のように `selectOrInsert()` と `wasInserted()` を使い、既存だったら `'exists'` を返すような実装で問題なさそうでしょうか?
55
+ 既存だったら `'exists'` を返すような実装で問題なさそうでしょうか?
53
56
 
54
57
  ```php
55
58
  final class LibraryTagController extends Controller

4

誤字

2025/01/01 00:34

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -21,8 +21,8 @@
21
21
  $request = json_decode(file_get_contents('php://input'), true);
22
22
 
23
23
  $this->validator->setRules([
24
- 'tag' => [
24
+ 'tagId' => [
25
- 'function' => fn ($v) => $this->validator->isTest($v),
25
+ 'function' => fn ($v) => $this->validator->isId($v),
26
26
  ],
27
27
  ]);
28
28
 
@@ -60,8 +60,8 @@
60
60
  $request = json_decode(file_get_contents('php://input'), true);
61
61
 
62
62
  $this->validator->setRules([
63
- 'tag' => [
63
+ 'tagId' => [
64
- 'function' => fn ($v) => $this->validator->isTest($v),
64
+ 'function' => fn ($v) => $this->validator->isId($v),
65
65
  ],
66
66
  ]);
67
67
 

3

誤字

2025/01/01 00:31

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -2,10 +2,10 @@
2
2
  以下の具体例において、php で `throw` すべきか否か・・ご意見いただけませんでしょうか
3
3
 
4
4
  ### 具体例
5
- 例えば「ライブラリに保存」とかの際に、「端末Aからすでに保存済みだが、端末BのHTML上ではまだ未保存状態であり、ゆえに保存処理はPOSTされうる」というケースがあるかと思います。
5
+ 例えば「ライブラリに保存」とかの際に、「端末Aからすでに保存済みだが、端末BのHTML上ではまだ未保存であり、ゆえに保存処理はPOSTされうる」というケースがあるかと思います。
6
6
 
7
7
  これは「不正なPOST」の一種かもしれませんけれど、「電話番号のフォームに住所が入力されたなどの不正なPOST」とは明らかにその性質が異なりますよね。
8
- ちょっとだけ不正(データベースに入ったらダメな値というほどではない不正さ)とでもいいましょうか。
8
+ ちょっとだけ不正(JavaScript の検証を突破したわけではない不正さ、データベースに入ったらダメな値というほどではない不正さ)とでもいいましょうか。
9
9
 
10
10
  ではこのようなちょっとだけ不正な値のPOSTに対して `throw` すべきか否か、というのを知りたいです。
11
11
 

2

誤字

2025/01/01 00:30

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -7,7 +7,7 @@
7
7
  これは「不正なPOST」の一種かもしれませんけれど、「電話番号のフォームに住所が入力されたなどの不正なPOST」とは明らかにその性質が異なりますよね。
8
8
  ちょっとだけ不正(データベースに入ったらダメな値というほどではない不正さ)とでもいいましょうか。
9
9
 
10
- ではこのようなちょっとだけ不正な値のPOSTに対して throw すべきか否か、というのを知りたいです。
10
+ ではこのようなちょっとだけ不正な値のPOSTに対して `throw` すべきか否か、というのを知りたいです。
11
11
 
12
12
  ### 現状の実装
13
13
  現状では下記 `throwIfExistsLibraryTag()` メソッドで既存なら例外という処理を挟んでみたのですが、わざわざ `throw` すべきなのかな、と疑問に思いました。(尚、このメソッドは「ちょっとだけ不正」を意味する専用の `class nonThreatIllegalException extends \Exception` を `throw` します。)

1

補足

2025/01/01 00:28

投稿

munekun
munekun

スコア93

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
  ではこのようなちょっとだけ不正な値のPOSTに対して throw すべきか否か、というのを知りたいです。
11
11
 
12
12
  ### 現状の実装
13
- 現状では下記 `throwIfExistsLibraryTag()` メソッドで既存なら例外という処理を挟んでみたのですが、わざわざ `throw` すべきなのかな、と疑問に思いました。(尚、このメソッドは「ややマシな不正」を意味する専用の `class nonThreatIllegalException extends \Exception` を `throw` します。)
13
+ 現状では下記 `throwIfExistsLibraryTag()` メソッドで既存なら例外という処理を挟んでみたのですが、わざわざ `throw` すべきなのかな、と疑問に思いました。(尚、このメソッドは「ちょっとだけ不正」を意味する専用の `class nonThreatIllegalException extends \Exception` を `throw` します。)
14
14
 
15
15
  ```php
16
16
  final class LibraryTagController extends Controller
@@ -91,3 +91,32 @@
91
91
 
92
92
  よろしくお願い致します。
93
93
 
94
+ ### 補足
95
+ HTTPステータスコードに `409 Conflict` なるものがあると知りました。もしかしてこれがぴったりでしょうか?
96
+ だとすると当質問へのベストな回答は、以下のように「`ConflictException` という例外クラスを作った上で`throw` すべき」という内容になりますでしょうか?
97
+ ```php
98
+ class HttpException extends \Exception
99
+ {
100
+ protected int $statusCode;
101
+
102
+ public function __construct(string $message, int $statusCode = 500)
103
+ {
104
+ parent::__construct($message);
105
+ $this->statusCode = $statusCode;
106
+ }
107
+
108
+ public function getStatusCode(): int
109
+ {
110
+ return $this->statusCode;
111
+ }
112
+ }
113
+
114
+ class ConflictException extends HttpException
115
+ {
116
+ public function __construct(string $message = 'Conflict detected')
117
+ {
118
+ parent::__construct($message, 409);
119
+ }
120
+ }
121
+ ```
122
+