質問編集履歴
5
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -275,3 +275,9 @@
|
|
275
275
|
多くの場合、新規登録⇨すぐさま削除ができています。
|
276
276
|
最初は「勘違いかな?」と思ったのですが、何度かやってるとたまに再現します。
|
277
277
|
|
278
|
+
追記4)
|
279
|
+
再現する条件がわかりました。
|
280
|
+
登録⇨瞬く間に削除すると失敗します。
|
281
|
+
登録⇨5、6秒の一呼吸をおくと削除できます。
|
282
|
+
なぜでしょうう?
|
283
|
+
Laravel Framework 10.1.5 です。
|
4
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -269,3 +269,9 @@
|
|
269
269
|
}
|
270
270
|
}
|
271
271
|
```
|
272
|
+
|
273
|
+
追記3)
|
274
|
+
必ず再現するワケではありません。
|
275
|
+
多くの場合、新規登録⇨すぐさま削除ができています。
|
276
|
+
最初は「勘違いかな?」と思ったのですが、何度かやってるとたまに再現します。
|
277
|
+
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,3 +40,232 @@
|
|
40
40
|
追記1)
|
41
41
|
新規登録⇨すぐさま削除のときだけ削除できないようです。
|
42
42
|
登録⇨一度画面を閉じる⇨削除は問題なかったです。
|
43
|
+
|
44
|
+
追記2)
|
45
|
+
```index.blade.php
|
46
|
+
<!DOCTYPE html>
|
47
|
+
<html lang="ja">
|
48
|
+
<head>
|
49
|
+
<meta charset="UTF-8">
|
50
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
51
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
52
|
+
<title>アドレス帳</title>
|
53
|
+
<link rel='stylesheet' href="{{ asset('css/address/styles.css') }}">
|
54
|
+
<link rel='icon' href="{{ asset('img/favicon.ico') }}" id='favicon'>
|
55
|
+
</head>
|
56
|
+
<body>
|
57
|
+
<header>
|
58
|
+
<img src='../../img/home.png' onclick="location.href='../index.php'" width='32' height='32'>
|
59
|
+
</header>
|
60
|
+
<table>
|
61
|
+
<div class="container">
|
62
|
+
<h1 class="title">アドレス帳</h1>
|
63
|
+
{{-- <button class="add" onclick="window.location='{{ route('address.create') }}'">新規追加</button> --}}
|
64
|
+
<input type='button' class='add' value='新規追加' onclick="window.location='{{ route('address.create') }}'">
|
65
|
+
</div>
|
66
|
+
</h1>
|
67
|
+
<tr>
|
68
|
+
<th>削除</th>
|
69
|
+
<th>修正</th>
|
70
|
+
<th>性</th>
|
71
|
+
<th>名</th>
|
72
|
+
<th>セイ</th>
|
73
|
+
<th>メイ</th>
|
74
|
+
<th>電話番号</th>
|
75
|
+
<th>郵便番号</th>
|
76
|
+
<th>住所</th>
|
77
|
+
</tr>
|
78
|
+
@foreach ($addresses as $address)
|
79
|
+
<tr>
|
80
|
+
<form>
|
81
|
+
@method('DELETE')
|
82
|
+
@csrf
|
83
|
+
<td width='75'><button onclick="window.location='{{ route('address.destroy', $address) }}'">削除</button></td>
|
84
|
+
</form>
|
85
|
+
<td width='75'><button onclick="window.location='{{ route('address.edit', $address) }}'">修正</button></td>
|
86
|
+
<td width='100' class="table_content">{{ $address->kanji_sei }}</td>
|
87
|
+
<td width='100' class="table_content">{{ $address->kanji_mei }}</td>
|
88
|
+
<td width='150' class="table_content">{{ $address->kana_sei }}</td>
|
89
|
+
<td width='150' class="table_content">{{ $address->kana_mei }}</td>
|
90
|
+
<td width='120' class="table_content">{{ $address->tel }}</td>
|
91
|
+
<td width='100' class="table_content">{{ $address->zipcode }}</td>
|
92
|
+
<td class="table_content">{{ $address->address1 . $address->address2 }}</td>
|
93
|
+
</tr>
|
94
|
+
@endforeach
|
95
|
+
</table>
|
96
|
+
</body>
|
97
|
+
</html>
|
98
|
+
```
|
99
|
+
```create.blade.php
|
100
|
+
<!DOCTYPE html>
|
101
|
+
<html lang="ja">
|
102
|
+
<head>
|
103
|
+
<meta charset="UTF-8">
|
104
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
105
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
106
|
+
<link rel='stylesheet' href="{{ asset('css/address/create.css') }}">
|
107
|
+
<link rel='icon' href="{{ asset('img/favicon.ico') }}" id='favicon'>
|
108
|
+
<title>アドレス帳 - 作成</title>
|
109
|
+
</head>
|
110
|
+
<body>
|
111
|
+
<header>
|
112
|
+
<img src='../../img/home.png' onclick="location.href='../index.php'" width='32' height='32'>
|
113
|
+
</header>
|
114
|
+
<form method='POST' action="{{ route('address.store') }}">
|
115
|
+
@csrf
|
116
|
+
|
117
|
+
<div class='containar'>
|
118
|
+
<h1>アドレス帳 - 作成</h1>
|
119
|
+
|
120
|
+
<div class='entry'>
|
121
|
+
<div class='sei'>
|
122
|
+
<label>姓</label><span class='required'>【必須】</span><br>
|
123
|
+
<input type=text name='kanji_sei' tabindex='1' value="{{ old('kanji_sei') }}"><br>
|
124
|
+
@error('kanji_sei')
|
125
|
+
<div class='error'>{{ $message }}</div>
|
126
|
+
@enderror
|
127
|
+
<label>セイ</label><span class='required'>【必須】</span><br>
|
128
|
+
<input type=text name='kana_sei' tabindex='3' value="{{ old('kana_sei') }}"><br>
|
129
|
+
@error('kana_sei')
|
130
|
+
<div class='error'>{{ $message }}</div>
|
131
|
+
@enderror
|
132
|
+
</div>
|
133
|
+
<div class='mei'>
|
134
|
+
<label>名</label><span class='required'>【必須】</span><br>
|
135
|
+
<input type=text name='kanji_mei' tabindex='2' value="{{ old('kanji_mei') }}"><br>
|
136
|
+
@error('kanji_mei')
|
137
|
+
<div class='error'>{{ $message }}</div>
|
138
|
+
@enderror
|
139
|
+
<label>メイ</label><span class='required'>【必須】</span><br>
|
140
|
+
<input type=text name='kana_mei' tabindex='4' value="{{ old('kana_mei') }}"><br>
|
141
|
+
@error('kana_mei')
|
142
|
+
<div class='error'>{{ $message }}</div>
|
143
|
+
@enderror
|
144
|
+
</div>
|
145
|
+
</div>
|
146
|
+
<label>電話番号</label><span class='required'>【必須】</span><br>
|
147
|
+
<input type=text name='tel' value="{{ old('tel') }}"><span class='comment'>ハイフン不要です</span><br>
|
148
|
+
@error('tel')
|
149
|
+
<div class='error'>{{ $message }}</div>
|
150
|
+
@enderror
|
151
|
+
<label>郵便番号</label><span class='required'>【必須】</span><br>
|
152
|
+
{{-- <input type=text name='zipcode' value="{{ old('zipcode') }}"><br> --}}
|
153
|
+
<input type="text" name="zipcode" value="{{ old('zipcode') }}" onKeyUp="AjaxZip3.zip2addr(this,'','address1','address1');"><span class='comment'>ハイフン不要です</span><br>
|
154
|
+
@error('zipcode')
|
155
|
+
<div class='error'>{{ $message }}</div>
|
156
|
+
@enderror
|
157
|
+
<label>市区町村</label><span class='required'>【必須】</span><br>
|
158
|
+
{{-- <input type=text name='address1' value="{{ old('address1') }}"><br> --}}
|
159
|
+
<input type="text" name="address1" class='address' value="{{ old('address1') }}"><br>
|
160
|
+
@error('address1')
|
161
|
+
<div class='error'>{{ $message }}</div>
|
162
|
+
@enderror
|
163
|
+
<label>番地(アパート名など)</label><span class='required'>【必須】</span><br>
|
164
|
+
<input type=text name='address2' class='address' value="{{ old('address2') }}"><br>
|
165
|
+
@error('address2')
|
166
|
+
<div class='error'>{{ $message }}</div>
|
167
|
+
@enderror
|
168
|
+
|
169
|
+
<input type='submit' value='登録'>
|
170
|
+
<input type='reset' value='リセット'>
|
171
|
+
</div>
|
172
|
+
</form>
|
173
|
+
<script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script>
|
174
|
+
</body>
|
175
|
+
</html>
|
176
|
+
```
|
177
|
+
```AddressController.php
|
178
|
+
<?php
|
179
|
+
|
180
|
+
namespace App\Http\Controllers;
|
181
|
+
|
182
|
+
use Illuminate\Http\Request;
|
183
|
+
use App\Models\Address;
|
184
|
+
|
185
|
+
class AddressController extends Controller
|
186
|
+
{
|
187
|
+
public function index()
|
188
|
+
{
|
189
|
+
$addresses = Address::latest()->get();
|
190
|
+
|
191
|
+
return view('address.index')
|
192
|
+
->with(['addresses' => $addresses]);
|
193
|
+
}
|
194
|
+
|
195
|
+
public function create()
|
196
|
+
{
|
197
|
+
return view('address.create');
|
198
|
+
}
|
199
|
+
|
200
|
+
public function store(Request $request)
|
201
|
+
{
|
202
|
+
|
203
|
+
$request->validate([
|
204
|
+
'kanji_sei' => 'required|max:20',
|
205
|
+
'kanji_mei' => 'required|max:20',
|
206
|
+
'kana_sei' => 'required|max:20',
|
207
|
+
'kana_mei' => 'required|max:20',
|
208
|
+
'tel' => 'required|max:11',
|
209
|
+
'zipcode' => 'required|max:7',
|
210
|
+
'address1' => 'required|max:255',
|
211
|
+
'address2' => 'required|max:255',
|
212
|
+
]);
|
213
|
+
|
214
|
+
$address = new Address();
|
215
|
+
$address->kanji_sei = $request->kanji_sei;
|
216
|
+
$address->kanji_mei = $request->kanji_mei;
|
217
|
+
$address->kana_sei = $request->kana_sei;
|
218
|
+
$address->kana_mei = $request->kana_mei;
|
219
|
+
$address->tel = $request->tel;
|
220
|
+
$address->zipcode = $request->zipcode;
|
221
|
+
$address->address1 = $request->address1;
|
222
|
+
$address->address2 = $request->address2;
|
223
|
+
$address->save();
|
224
|
+
|
225
|
+
return redirect()
|
226
|
+
->route('address.index');
|
227
|
+
}
|
228
|
+
|
229
|
+
public function update(Request $request, Address $address)
|
230
|
+
{
|
231
|
+
|
232
|
+
$request->validate([
|
233
|
+
'kanji_sei' => 'required|max:20',
|
234
|
+
'kanji_mei' => 'required|max:20',
|
235
|
+
'kana_sei' => 'required|max:20',
|
236
|
+
'kana_mei' => 'required|max:20',
|
237
|
+
'tel' => 'required|max:11',
|
238
|
+
'zipcode' => 'required|max:7',
|
239
|
+
'address1' => 'required|max:255',
|
240
|
+
'address2' => 'required|max:255',
|
241
|
+
]);
|
242
|
+
|
243
|
+
$address->kanji_sei = $request->kanji_sei;
|
244
|
+
$address->kanji_mei = $request->kanji_mei;
|
245
|
+
$address->kana_sei = $request->kana_sei;
|
246
|
+
$address->kana_mei = $request->kana_mei;
|
247
|
+
$address->tel = $request->tel;
|
248
|
+
$address->zipcode = $request->zipcode;
|
249
|
+
$address->address1 = $request->address1;
|
250
|
+
$address->address2 = $request->address2;
|
251
|
+
$address->save();
|
252
|
+
|
253
|
+
return redirect()
|
254
|
+
->route('address.index');
|
255
|
+
}
|
256
|
+
|
257
|
+
public function edit(Address $address)
|
258
|
+
{
|
259
|
+
return view('address.edit')
|
260
|
+
->with(['address' => $address]);
|
261
|
+
}
|
262
|
+
|
263
|
+
public function destroy(Address $address)
|
264
|
+
{
|
265
|
+
$address->delete();
|
266
|
+
|
267
|
+
return redirect()
|
268
|
+
->route('address.index');
|
269
|
+
}
|
270
|
+
}
|
271
|
+
```
|
2
課題の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
Route::delete('/address/{address}/destroy', [AddressController::class, 'destroy'])
|
35
35
|
->name('address.destroy');
|
36
36
|
```
|
37
|
-
|
37
|
+
できれば、登録→すぐに削除ができるとありがたいです。
|
38
38
|
見当違いの質問であったら申し訳ありません。
|
39
39
|
|
40
40
|
追記1)
|
1
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -37,3 +37,6 @@
|
|
37
37
|
|
38
38
|
見当違いの質問であったら申し訳ありません。
|
39
39
|
|
40
|
+
追記1)
|
41
|
+
新規登録⇨すぐさま削除のときだけ削除できないようです。
|
42
|
+
登録⇨一度画面を閉じる⇨削除は問題なかったです。
|