質問編集履歴
7
書式の改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -50,9 +50,8 @@
|
|
50
50
|
|
51
51
|
### 改善案?
|
52
52
|
そしてもしわざわざ `throw` などしない方がいいとなると、
|
53
|
-
上記
|
53
|
+
上記 `throwIfExistsLibraryTag()`, `insert()` のコンビ (既存なら `throw` する) でなく
|
54
|
-
下記
|
54
|
+
下記 `selectOrInsert()`, `wasInserted()` のコンビ (既存なら `'exists'` を返す) で良いですか?
|
55
|
-
既存だったら `'exists'` を返すような実装で問題なさそうでしょうか?
|
56
55
|
|
57
56
|
```php
|
58
57
|
final class LibraryTagController extends Controller
|
6
書式の改善
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
書式の改善
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
|
-
|
55
|
+
既存だったら `'exists'` を返すような実装で問題なさそうでしょうか?
|
53
56
|
|
54
57
|
```php
|
55
58
|
final class LibraryTagController extends Controller
|
4
誤字
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->is
|
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->is
|
64
|
+
'function' => fn ($v) => $this->validator->isId($v),
|
65
65
|
],
|
66
66
|
]);
|
67
67
|
|
3
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
以下の具体例において、php で `throw` すべきか否か・・ご意見いただけませんでしょうか
|
3
3
|
|
4
4
|
### 具体例
|
5
|
-
例えば「ライブラリに保存」とかの際に、「端末Aからすでに保存済みだが、端末BのHTML上ではまだ未保存
|
5
|
+
例えば「ライブラリに保存」とかの際に、「端末Aからすでに保存済みだが、端末BのHTML上ではまだ未保存であり、ゆえに保存処理はPOSTされうる」というケースがあるかと思います。
|
6
6
|
|
7
7
|
これは「不正なPOST」の一種かもしれませんけれど、「電話番号のフォームに住所が入力されたなどの不正なPOST」とは明らかにその性質が異なりますよね。
|
8
|
-
ちょっとだけ不正(データベースに入ったらダメな値というほどではない不正さ)とでもいいましょうか。
|
8
|
+
ちょっとだけ不正(JavaScript の検証を突破したわけではない不正さ、データベースに入ったらダメな値というほどではない不正さ)とでもいいましょうか。
|
9
9
|
|
10
10
|
ではこのようなちょっとだけ不正な値のPOSTに対して `throw` すべきか否か、というのを知りたいです。
|
11
11
|
|
2
誤字
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
補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
ではこのようなちょっとだけ不正な値のPOSTに対して throw すべきか否か、というのを知りたいです。
|
11
11
|
|
12
12
|
### 現状の実装
|
13
|
-
現状では下記 `throwIfExistsLibraryTag()` メソッドで既存なら例外という処理を挟んでみたのですが、わざわざ `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
|
+
|