回答編集履歴
43
微調整
test
CHANGED
@@ -598,7 +598,7 @@
|
|
598
598
|
|
599
599
|
|
600
600
|
|
601
|
-
>
|
601
|
+
> コードの理解のための NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
602
602
|
|
603
603
|
> **サンプルコード の「処理の流れ」と「変数の値」を調べるために** 使います
|
604
604
|
|
42
微調整
test
CHANGED
@@ -584,7 +584,7 @@
|
|
584
584
|
|
585
585
|
|
586
586
|
|
587
|
-
> NetBeans IDE デバッグ機能
|
587
|
+
> NetBeans IDE デバッグ機能 には、2通りの使い方があります
|
588
588
|
|
589
589
|
>
|
590
590
|
|
@@ -598,7 +598,7 @@
|
|
598
598
|
|
599
599
|
|
600
600
|
|
601
|
-
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
601
|
+
> 今回の NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
602
602
|
|
603
603
|
> **サンプルコード の「処理の流れ」と「変数の値」を調べるために** 使います
|
604
604
|
|
41
微調整
test
CHANGED
@@ -44,8 +44,6 @@
|
|
44
44
|
|
45
45
|
> [パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
46
46
|
|
47
|
-
> [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html) (Mac ユーザ の NetBeans IDE 使用)
|
48
|
-
|
49
47
|
|
50
48
|
|
51
49
|
パーフェクトPHP をデバッグしました (学習方法) や
|
40
微調整
test
CHANGED
@@ -588,9 +588,11 @@
|
|
588
588
|
|
589
589
|
> NetBeans IDE デバッグ機能
|
590
590
|
|
591
|
+
>
|
592
|
+
|
591
593
|
- バグを見つける (本来のデバッグ)
|
592
594
|
|
593
|
-
>
|
595
|
+
>
|
594
596
|
|
595
597
|
- コードを追う (コードの理解)
|
596
598
|
|
39
微調整
test
CHANGED
@@ -530,7 +530,7 @@
|
|
530
530
|
|
531
531
|
...
|
532
532
|
|
533
|
-
__
|
533
|
+
(__MiniBlogApplication.php__ にエラーがあったので、コードの提示は必要無くなった)
|
534
534
|
|
535
535
|
|
536
536
|
|
@@ -586,21 +586,31 @@
|
|
586
586
|
|
587
587
|
|
588
588
|
|
589
|
+
> NetBeans IDE デバッグ機能
|
590
|
+
|
591
|
+
- バグを見つける (本来のデバッグ)
|
592
|
+
|
593
|
+
>
|
594
|
+
|
595
|
+
- コードを追う (コードの理解)
|
596
|
+
|
597
|
+
|
598
|
+
|
599
|
+
|
600
|
+
|
601
|
+
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
602
|
+
|
603
|
+
> **サンプルコード の「処理の流れ」と「変数の値」を調べるために** 使います
|
604
|
+
|
589
605
|
>
|
590
606
|
|
591
|
-
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
592
|
-
|
593
|
-
> **サンプルコード の「処理の流れ」と「変数の値」を調べるために** 使います
|
594
|
-
|
595
|
-
>
|
596
|
-
|
597
607
|
> どんなツールも初めは大変ですが、すぐに慣れます
|
598
608
|
|
599
609
|
> 特に、**初心者の方** には効果が大きいです
|
600
610
|
|
601
611
|
> [**デバッグ例**](http://beginner001.html.xdomain.jp/debug-04.html#NetBeans_debug_example)
|
602
612
|
|
603
|
-
|
613
|
+
|
604
614
|
|
605
615
|
|
606
616
|
|
38
微調整
test
CHANGED
@@ -104,6 +104,8 @@
|
|
104
104
|
|
105
105
|
- デバッグ中の変数の**変更**は、**メモリ上**です (ファイルは元のまま)
|
106
106
|
|
107
|
+
- index.php ではなく index**_dev**.php を使用します
|
108
|
+
|
107
109
|
|
108
110
|
|
109
111
|
> サンプルコードの仕様 と orangefarmerさんの仕様 との違い (ホームページ表示とログイン)
|
@@ -681,3 +683,11 @@
|
|
681
683
|
` $this->configure();` ← **空** のメソッドのまま co**n**figure (データベースへの接続設定 が **未定義**)
|
682
684
|
|
683
685
|
` }`
|
686
|
+
|
687
|
+
|
688
|
+
|
689
|
+
##### 上記エラーで、フレームワークとオブジェクト指向の「考え方」が良く分かります
|
690
|
+
|
691
|
+
|
692
|
+
|
693
|
+
---
|
37
微調整
test
CHANGED
@@ -526,9 +526,9 @@
|
|
526
526
|
|
527
527
|
DbManager.php と Application.php のコード提示をしてもらう予定
|
528
528
|
|
529
|
-
|
529
|
+
...
|
530
|
-
|
530
|
+
|
531
|
-
(MiniBlogApplication.php にエラーがあったので、コードの提示は必要無くなった)
|
531
|
+
__ (MiniBlogApplication.php にエラーがあったので、コードの提示は必要無くなった) __
|
532
532
|
|
533
533
|
|
534
534
|
|
36
微調整
test
CHANGED
@@ -588,9 +588,15 @@
|
|
588
588
|
|
589
589
|
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
590
590
|
|
591
|
-
> 処理の流れ と 変数の値 が分かることで
|
592
|
-
|
593
|
-
> **
|
591
|
+
> **サンプルコード の「処理の流れ」と「変数の値」を調べるために** 使います
|
592
|
+
|
593
|
+
>
|
594
|
+
|
595
|
+
> どんなツールも初めは大変ですが、すぐに慣れます
|
596
|
+
|
597
|
+
> 特に、**初心者の方** には効果が大きいです
|
598
|
+
|
599
|
+
> [**デバッグ例**](http://beginner001.html.xdomain.jp/debug-04.html#NetBeans_debug_example)
|
594
600
|
|
595
601
|
>
|
596
602
|
|
35
微調整
test
CHANGED
@@ -140,7 +140,7 @@
|
|
140
140
|
|
141
141
|
デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
142
142
|
|
143
|
-
orangefarmerさんの仕様 に合わせるため
|
143
|
+
orangefarmerさんの仕様 に合わせるため、強引に **未ログイン状態 可** にしています
|
144
144
|
|
145
145
|
|
146
146
|
|
34
微調整
test
CHANGED
@@ -140,6 +140,8 @@
|
|
140
140
|
|
141
141
|
デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
142
142
|
|
143
|
+
orangefarmerさんの仕様 に合わせるために、強引に **未ログイン状態 可** にしています
|
144
|
+
|
143
145
|
|
144
146
|
|
145
147
|
参考
|
33
微調整
test
CHANGED
@@ -208,7 +208,7 @@
|
|
208
208
|
|
209
209
|
**原因**
|
210
210
|
|
211
|
-
> デバッグを実行すると、最後に **エラーが再現** されます
|
211
|
+
> デバッグを実行すると、最後に **エラーが「再現」** されます
|
212
212
|
|
213
213
|
>
|
214
214
|
|
32
微調整
test
CHANGED
@@ -206,143 +206,395 @@
|
|
206
206
|
|
207
207
|
|
208
208
|
|
209
|
+
**原因**
|
210
|
+
|
211
|
+
> デバッグを実行すると、最後に **エラーが再現** されます
|
212
|
+
|
209
213
|
>
|
210
214
|
|
211
|
-
>
|
215
|
+
> 「正しい」**データベースへの接続設定 (PDO インスタンス)** の
|
216
|
+
|
217
|
+
**$this->con** を「壊しています」
|
212
218
|
|
213
219
|
>
|
214
220
|
|
215
|
-
> 「正しい」**データベースへの接続設定 (PDO インスタンス)** の
|
216
|
-
|
217
|
-
**$this->con**
|
221
|
+
> (DbRepository 41* **$this->con** false に変更)
|
218
222
|
|
219
223
|
>
|
220
224
|
|
225
|
+
> エラーの原因は、**DB への接続ミス**です
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
Application.php
|
230
|
+
|
231
|
+
```PHP
|
232
|
+
|
233
|
+
...
|
234
|
+
|
235
|
+
173 public function run()
|
236
|
+
|
237
|
+
174 {
|
238
|
+
|
239
|
+
175 try {
|
240
|
+
|
241
|
+
176 $params = $this->router->resolve($this->request->getPathInfo());
|
242
|
+
|
243
|
+
177 if ($params === false) {
|
244
|
+
|
245
|
+
178 throw new HttpNotFoundException('No route found for ' . $this->request->getPathInfo());
|
246
|
+
|
247
|
+
179 }
|
248
|
+
|
249
|
+
180
|
250
|
+
|
251
|
+
181 $controller = $params['controller'];
|
252
|
+
|
253
|
+
182 $action = $params['action'];
|
254
|
+
|
255
|
+
183
|
256
|
+
|
257
|
+
184* $this->runAction($controller, $action, $params); /* ブレークポイント */
|
258
|
+
|
259
|
+
185 } catch (HttpNotFoundException $e) {
|
260
|
+
|
221
|
-
|
261
|
+
186 $this->render404Page($e);
|
262
|
+
|
263
|
+
187 } catch (UnauthorizedActionException $e) {
|
264
|
+
|
265
|
+
188 list($controller, $action) = $this->login_action;
|
266
|
+
|
267
|
+
189 $this->runAction($controller, $action);
|
268
|
+
|
269
|
+
190 }
|
270
|
+
|
271
|
+
191
|
272
|
+
|
273
|
+
...
|
274
|
+
|
275
|
+
```
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
Session.php
|
282
|
+
|
283
|
+
```PHP
|
284
|
+
|
285
|
+
...
|
286
|
+
|
287
|
+
43 public function get($name, $default = null)
|
288
|
+
|
289
|
+
44 {
|
290
|
+
|
291
|
+
45 if (isset($_SESSION[$name])) {
|
292
|
+
|
293
|
+
46 return $_SESSION[$name];
|
294
|
+
|
295
|
+
47 }
|
296
|
+
|
297
|
+
48
|
298
|
+
|
299
|
+
49 return $default; /* $default true に変更 */
|
300
|
+
|
301
|
+
50 }
|
302
|
+
|
303
|
+
...
|
304
|
+
|
305
|
+
101 public function isAuthenticated()
|
306
|
+
|
307
|
+
102 {
|
308
|
+
|
309
|
+
103* return $this->get('_authenticated', false); /* ブレークポイント */
|
310
|
+
|
311
|
+
104 }
|
312
|
+
|
313
|
+
...
|
314
|
+
|
315
|
+
```
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
DbRepository.php
|
322
|
+
|
323
|
+
```PHP
|
324
|
+
|
325
|
+
...
|
326
|
+
|
327
|
+
39 public function execute($sql, $params = array())
|
328
|
+
|
329
|
+
40 {
|
330
|
+
|
331
|
+
41* $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
332
|
+
|
333
|
+
42 $stmt->execute($params);
|
334
|
+
|
335
|
+
43
|
336
|
+
|
337
|
+
44 return $stmt;
|
338
|
+
|
339
|
+
45 }
|
340
|
+
|
341
|
+
...
|
342
|
+
|
343
|
+
```
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
---
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
**【コードを調べる】**
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(__Devas__)
|
356
|
+
|
357
|
+
|ファイル|メソッド|
|
358
|
+
|
359
|
+
|:--|:--|
|
360
|
+
|
361
|
+
|DbManager.php |public function **connect(**$name, $params)|
|
362
|
+
|
363
|
+
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
"**connect(**" を検索 検索ツール(__Devas__)
|
368
|
+
|
369
|
+
|ファイル|メソッド|
|
370
|
+
|
371
|
+
|:--|:--|
|
372
|
+
|
373
|
+
|MiniBlogApplication.php|protected function **configure(**)|
|
374
|
+
|
375
|
+
|~~DbManager.php~~|~~public function connect($name, $params)~~ 同上|
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
"**configure(**" を検索 検索ツール(__Devas__)
|
382
|
+
|
383
|
+
|ファイル|メソッド|
|
384
|
+
|
385
|
+
|:--|:--|
|
386
|
+
|
387
|
+
|~~MiniBlogApplication.php~~|~~protected function configure()~~ 同上|
|
388
|
+
|
389
|
+
|Application.php|public function __construct($debug = false)|
|
390
|
+
|
391
|
+
|Application.php|protected function configure()|
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
|
396
|
+
|
397
|
+
DbManager.php
|
398
|
+
|
399
|
+
```PHP
|
400
|
+
|
401
|
+
...
|
402
|
+
|
403
|
+
20 public function connect($name, $params)
|
404
|
+
|
405
|
+
21 {
|
406
|
+
|
407
|
+
22 $params = array_merge(array(
|
408
|
+
|
409
|
+
23 'dsn' => null,
|
410
|
+
|
411
|
+
24 'user' => '',
|
412
|
+
|
413
|
+
25 'password' => '',
|
414
|
+
|
415
|
+
26 'options' => array(),
|
416
|
+
|
417
|
+
27 ), $params);
|
418
|
+
|
419
|
+
28
|
420
|
+
|
421
|
+
29 $con = new PDO( /* "new PDO" を検索 */
|
422
|
+
|
423
|
+
30 $params['dsn'],
|
424
|
+
|
425
|
+
31 $params['user'],
|
426
|
+
|
427
|
+
32 $params['password'],
|
428
|
+
|
429
|
+
33 $params['options']
|
430
|
+
|
431
|
+
34 );
|
432
|
+
|
433
|
+
35
|
434
|
+
|
435
|
+
36 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
436
|
+
|
437
|
+
37
|
438
|
+
|
439
|
+
38 $this->connections[$name] = $con;
|
440
|
+
|
441
|
+
39 }
|
442
|
+
|
443
|
+
...
|
444
|
+
|
445
|
+
```
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
|
450
|
+
|
451
|
+
MiniBlogApplication.php
|
452
|
+
|
453
|
+
```PHP
|
454
|
+
|
455
|
+
...
|
456
|
+
|
457
|
+
37 protected function configure()
|
458
|
+
|
459
|
+
38 {
|
460
|
+
|
461
|
+
39 $this->db_manager->connect('master', array(
|
462
|
+
|
463
|
+
40 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',
|
464
|
+
|
465
|
+
41 'user' => 'root',
|
466
|
+
|
467
|
+
42 'password' => '',
|
468
|
+
|
469
|
+
43 ));
|
470
|
+
|
471
|
+
44 }
|
472
|
+
|
473
|
+
...
|
474
|
+
|
475
|
+
```
|
476
|
+
|
477
|
+
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
Application.php
|
482
|
+
|
483
|
+
```PHP
|
484
|
+
|
485
|
+
...
|
486
|
+
|
487
|
+
21 public function __construct($debug = false)
|
488
|
+
|
489
|
+
22 {
|
490
|
+
|
491
|
+
23 $this->setDebugMode($debug);
|
492
|
+
|
493
|
+
24 $this->initialize();
|
494
|
+
|
495
|
+
25 $this->configure();
|
496
|
+
|
497
|
+
26 }
|
498
|
+
|
499
|
+
...
|
500
|
+
|
501
|
+
60 protected function configure()
|
502
|
+
|
503
|
+
61 {
|
504
|
+
|
505
|
+
62 }
|
506
|
+
|
507
|
+
...
|
508
|
+
|
509
|
+
```
|
510
|
+
|
511
|
+
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
**上記 3ファイル の メソッド を調べる**
|
516
|
+
|
517
|
+
3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
518
|
+
|
519
|
+
MiniBlogApplication.php のみ
|
520
|
+
|
521
|
+
|
522
|
+
|
523
|
+
MiniBlogApplication.php に**エラーが無い場合**
|
524
|
+
|
525
|
+
DbManager.php と Application.php のコード提示をしてもらう予定
|
526
|
+
|
527
|
+
|
528
|
+
|
529
|
+
(MiniBlogApplication.php にエラーがあったので、コードの提示は必要無くなった)
|
530
|
+
|
531
|
+
|
532
|
+
|
533
|
+
---
|
534
|
+
|
535
|
+
|
536
|
+
|
537
|
+
**【修正箇所が分かる & NetBeans IDE デバッグ機能】**
|
538
|
+
|
539
|
+
|
540
|
+
|
541
|
+
差分ツール (**__WinMerge__**) で
|
542
|
+
|
543
|
+
MiniBlogApplication.php (サンプルコード) と
|
544
|
+
|
545
|
+
MiniBlogApplication.php (orangefarmer さん) を
|
546
|
+
|
547
|
+
比較する
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
|
552
|
+
|
553
|
+

|
554
|
+
|
555
|
+
**画像** MiniBlogApplication.phpの比較 (クリックすると、拡大表示します)
|
556
|
+
|
557
|
+
|
558
|
+
|
559
|
+
正 protected function co**n**figure()
|
560
|
+
|
561
|
+
誤 protected function cofigure()
|
562
|
+
|
563
|
+
|
564
|
+
|
565
|
+
|
566
|
+
|
567
|
+
今回のエラーを解決しても、別の不具合が出ます
|
568
|
+
|
569
|
+
- ホームページのデータ件数 ゼロ
|
570
|
+
|
571
|
+
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
572
|
+
|
573
|
+
- ログイン機能のデバッグ (or 実装)
|
574
|
+
|
575
|
+
- 写経 未完成 (ルーティング registerRoutes 参照) **画像** MiniBlogApplication.phpの比較 ↑
|
576
|
+
|
577
|
+
|
578
|
+
|
579
|
+
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
580
|
+
|
581
|
+
##### 「NetBeans IDE デバッグ機能」 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
582
|
+
|
583
|
+
|
222
584
|
|
223
585
|
>
|
224
586
|
|
587
|
+
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
588
|
+
|
225
|
-
>
|
589
|
+
> 処理の流れ と 変数の値 が分かることで
|
590
|
+
|
591
|
+
> **「フレームワークの内部」と「オブジェクト指向」を理解するために使います**
|
226
592
|
|
227
593
|
>
|
228
594
|
|
229
595
|
|
230
596
|
|
231
|
-
Application.php
|
232
|
-
|
233
|
-
```PHP
|
234
|
-
|
235
|
-
...
|
236
|
-
|
237
|
-
173 public function run()
|
238
|
-
|
239
|
-
174 {
|
240
|
-
|
241
|
-
175 try {
|
242
|
-
|
243
|
-
176 $params = $this->router->resolve($this->request->getPathInfo());
|
244
|
-
|
245
|
-
177 if ($params === false) {
|
246
|
-
|
247
|
-
178 throw new HttpNotFoundException('No route found for ' . $this->request->getPathInfo());
|
248
|
-
|
249
|
-
179 }
|
250
|
-
|
251
|
-
180
|
252
|
-
|
253
|
-
181 $controller = $params['controller'];
|
254
|
-
|
255
|
-
182 $action = $params['action'];
|
256
|
-
|
257
|
-
183
|
258
|
-
|
259
|
-
184* $this->runAction($controller, $action, $params); /* ブレークポイント */
|
260
|
-
|
261
|
-
185 } catch (HttpNotFoundException $e) {
|
262
|
-
|
263
|
-
186 $this->render404Page($e);
|
264
|
-
|
265
|
-
187 } catch (UnauthorizedActionException $e) {
|
266
|
-
|
267
|
-
188 list($controller, $action) = $this->login_action;
|
268
|
-
|
269
|
-
189 $this->runAction($controller, $action);
|
270
|
-
|
271
|
-
190 }
|
272
|
-
|
273
|
-
191
|
274
|
-
|
275
|
-
...
|
276
|
-
|
277
|
-
```
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
Session.php
|
284
|
-
|
285
|
-
```PHP
|
286
|
-
|
287
|
-
...
|
288
|
-
|
289
|
-
43 public function get($name, $default = null)
|
290
|
-
|
291
|
-
44 {
|
292
|
-
|
293
|
-
45 if (isset($_SESSION[$name])) {
|
294
|
-
|
295
|
-
46 return $_SESSION[$name];
|
296
|
-
|
297
|
-
47 }
|
298
|
-
|
299
|
-
48
|
300
|
-
|
301
|
-
49 return $default; /* $default true に変更 */
|
302
|
-
|
303
|
-
50 }
|
304
|
-
|
305
|
-
...
|
306
|
-
|
307
|
-
101 public function isAuthenticated()
|
308
|
-
|
309
|
-
102 {
|
310
|
-
|
311
|
-
103* return $this->get('_authenticated', false); /* ブレークポイント */
|
312
|
-
|
313
|
-
104 }
|
314
|
-
|
315
|
-
...
|
316
|
-
|
317
|
-
```
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
DbRepository.php
|
324
|
-
|
325
|
-
```PHP
|
326
|
-
|
327
|
-
...
|
328
|
-
|
329
|
-
39 public function execute($sql, $params = array())
|
330
|
-
|
331
|
-
40 {
|
332
|
-
|
333
|
-
41* $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
334
|
-
|
335
|
-
42 $stmt->execute($params);
|
336
|
-
|
337
|
-
43
|
338
|
-
|
339
|
-
|
597
|
+
詳細は、**参考サイトのリンク** をご覧ください
|
340
|
-
|
341
|
-
45 }
|
342
|
-
|
343
|
-
...
|
344
|
-
|
345
|
-
```
|
346
598
|
|
347
599
|
|
348
600
|
|
@@ -350,260 +602,6 @@
|
|
350
602
|
|
351
603
|
|
352
604
|
|
353
|
-
**【コードを調べる】**
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(__Devas__)
|
358
|
-
|
359
|
-
|ファイル|メソッド|
|
360
|
-
|
361
|
-
|:--|:--|
|
362
|
-
|
363
|
-
|DbManager.php |public function **connect(**$name, $params)|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
"**connect(**" を検索 検索ツール(__Devas__)
|
370
|
-
|
371
|
-
|ファイル|メソッド|
|
372
|
-
|
373
|
-
|:--|:--|
|
374
|
-
|
375
|
-
|MiniBlogApplication.php|protected function **configure(**)|
|
376
|
-
|
377
|
-
|~~DbManager.php~~|~~public function connect($name, $params)~~ 同上|
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
"**configure(**" を検索 検索ツール(__Devas__)
|
384
|
-
|
385
|
-
|ファイル|メソッド|
|
386
|
-
|
387
|
-
|:--|:--|
|
388
|
-
|
389
|
-
|~~MiniBlogApplication.php~~|~~protected function configure()~~ 同上|
|
390
|
-
|
391
|
-
|Application.php|public function __construct($debug = false)|
|
392
|
-
|
393
|
-
|Application.php|protected function configure()|
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
DbManager.php
|
400
|
-
|
401
|
-
```PHP
|
402
|
-
|
403
|
-
...
|
404
|
-
|
405
|
-
20 public function connect($name, $params)
|
406
|
-
|
407
|
-
21 {
|
408
|
-
|
409
|
-
22 $params = array_merge(array(
|
410
|
-
|
411
|
-
23 'dsn' => null,
|
412
|
-
|
413
|
-
24 'user' => '',
|
414
|
-
|
415
|
-
25 'password' => '',
|
416
|
-
|
417
|
-
26 'options' => array(),
|
418
|
-
|
419
|
-
27 ), $params);
|
420
|
-
|
421
|
-
28
|
422
|
-
|
423
|
-
29 $con = new PDO( /* "new PDO" を検索 */
|
424
|
-
|
425
|
-
30 $params['dsn'],
|
426
|
-
|
427
|
-
31 $params['user'],
|
428
|
-
|
429
|
-
32 $params['password'],
|
430
|
-
|
431
|
-
33 $params['options']
|
432
|
-
|
433
|
-
34 );
|
434
|
-
|
435
|
-
35
|
436
|
-
|
437
|
-
36 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
438
|
-
|
439
|
-
37
|
440
|
-
|
441
|
-
38 $this->connections[$name] = $con;
|
442
|
-
|
443
|
-
39 }
|
444
|
-
|
445
|
-
...
|
446
|
-
|
447
|
-
```
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
MiniBlogApplication.php
|
454
|
-
|
455
|
-
```PHP
|
456
|
-
|
457
|
-
...
|
458
|
-
|
459
|
-
37 protected function configure()
|
460
|
-
|
461
|
-
38 {
|
462
|
-
|
463
|
-
39 $this->db_manager->connect('master', array(
|
464
|
-
|
465
|
-
40 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',
|
466
|
-
|
467
|
-
41 'user' => 'root',
|
468
|
-
|
469
|
-
42 'password' => '',
|
470
|
-
|
471
|
-
43 ));
|
472
|
-
|
473
|
-
44 }
|
474
|
-
|
475
|
-
...
|
476
|
-
|
477
|
-
```
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
Application.php
|
484
|
-
|
485
|
-
```PHP
|
486
|
-
|
487
|
-
...
|
488
|
-
|
489
|
-
21 public function __construct($debug = false)
|
490
|
-
|
491
|
-
22 {
|
492
|
-
|
493
|
-
23 $this->setDebugMode($debug);
|
494
|
-
|
495
|
-
24 $this->initialize();
|
496
|
-
|
497
|
-
25 $this->configure();
|
498
|
-
|
499
|
-
26 }
|
500
|
-
|
501
|
-
...
|
502
|
-
|
503
|
-
60 protected function configure()
|
504
|
-
|
505
|
-
61 {
|
506
|
-
|
507
|
-
62 }
|
508
|
-
|
509
|
-
...
|
510
|
-
|
511
|
-
```
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
**上記 3ファイル の メソッド を調べる**
|
518
|
-
|
519
|
-
3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
520
|
-
|
521
|
-
MiniBlogApplication.php のみ
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
MiniBlogApplication.php に**エラーが無い場合**
|
526
|
-
|
527
|
-
DbManager.php と Application.php のコード提示をしてもらう予定
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
(MiniBlogApplication.php にエラーがあったので、コードの提示は必要無くなった)
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
---
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
**【修正箇所が分かる & NetBeans IDE デバッグ機能】**
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
差分ツール (**__WinMerge__**) で
|
544
|
-
|
545
|
-
MiniBlogApplication.php (サンプルコード) と
|
546
|
-
|
547
|
-
MiniBlogApplication.php (orangefarmer さん) を
|
548
|
-
|
549
|
-
比較する
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-

|
556
|
-
|
557
|
-
**画像** MiniBlogApplication.phpの比較 (クリックすると、拡大表示します)
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
正 protected function co**n**figure()
|
562
|
-
|
563
|
-
誤 protected function cofigure()
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
今回のエラーを解決しても、別の不具合が出ます
|
570
|
-
|
571
|
-
- ホームページのデータ件数 ゼロ
|
572
|
-
|
573
|
-
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
574
|
-
|
575
|
-
- ログイン機能のデバッグ (or 実装)
|
576
|
-
|
577
|
-
- 写経 未完成 (ルーティング registerRoutes 参照) **画像** MiniBlogApplication.phpの比較 ↑
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
582
|
-
|
583
|
-
##### 「NetBeans IDE デバッグ機能」 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
>
|
588
|
-
|
589
|
-
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
590
|
-
|
591
|
-
> 処理の流れ と 変数の値 が分かることで
|
592
|
-
|
593
|
-
> **「フレームワークの内部」と「オブジェクト指向」を理解するために使います**
|
594
|
-
|
595
|
-
>
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
詳細は、**参考サイトのリンク** をご覧ください
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
---
|
604
|
-
|
605
|
-
|
606
|
-
|
607
605
|
【エラーの理由】
|
608
606
|
|
609
607
|
|
31
微調整
test
CHANGED
@@ -130,7 +130,7 @@
|
|
130
130
|
|
131
131
|
>>
|
132
132
|
|
133
|
-
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
133
|
+
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の 値 がセットされます
|
134
134
|
|
135
135
|
>>
|
136
136
|
|
30
微調整
test
CHANGED
@@ -106,9 +106,9 @@
|
|
106
106
|
|
107
107
|
|
108
108
|
|
109
|
-
サンプルコードの仕様 と orangefarmerさんの仕様 との違い (ホームページ表示とログイン)
|
109
|
+
> サンプルコードの仕様 と orangefarmerさんの仕様 との違い (ホームページ表示とログイン)
|
110
|
-
|
111
|
-
|
110
|
+
|
111
|
+
|
112
112
|
|
113
113
|
> サンプルコードの仕様
|
114
114
|
|
@@ -126,7 +126,7 @@
|
|
126
126
|
|
127
127
|
>>
|
128
128
|
|
129
|
-
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス** で
|
129
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス** で 処理は中断)
|
130
130
|
|
131
131
|
>>
|
132
132
|
|
@@ -210,7 +210,13 @@
|
|
210
210
|
|
211
211
|
> デバッグを実行すると、最後に **エラーが再現** されます
|
212
212
|
|
213
|
+
>
|
214
|
+
|
213
|
-
> 「正しい」**データベースへの接続設定 (PDO インスタンス)** の
|
215
|
+
> 「正しい」**データベースへの接続設定 (PDO インスタンス)** の
|
216
|
+
|
217
|
+
**$this->con** を「壊しています」
|
218
|
+
|
219
|
+
>
|
214
220
|
|
215
221
|
> (DbRepository 41* **$this->con** false に変更)
|
216
222
|
|
@@ -568,7 +574,7 @@
|
|
568
574
|
|
569
575
|
- ログイン機能のデバッグ (or 実装)
|
570
576
|
|
571
|
-
- 写経 未完成 (ルーティング registerRoutes) **画像** MiniBlogApplication.phpの比較
|
577
|
+
- 写経 未完成 (ルーティング registerRoutes 参照) **画像** MiniBlogApplication.phpの比較 ↑
|
572
578
|
|
573
579
|
|
574
580
|
|
@@ -584,7 +590,7 @@
|
|
584
590
|
|
585
591
|
> 処理の流れ と 変数の値 が分かることで
|
586
592
|
|
587
|
-
> 「フレームワークの内部」と「オブジェクト指向」を理解するために使います
|
593
|
+
> **「フレームワークの内部」と「オブジェクト指向」を理解するために使います**
|
588
594
|
|
589
595
|
>
|
590
596
|
|
29
微調整
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
注意点
|
102
102
|
|
103
|
-
- 公式サイト サンプルコード(mini-blog.zip) を使用 (不具合 2ヶ所修正)
|
103
|
+
- 公式サイト **サンプルコード(mini-blog.zip)** を使用 (不具合 2ヶ所修正)
|
104
104
|
|
105
105
|
- デバッグ中の変数の**変更**は、**メモリ上**です (ファイルは元のまま)
|
106
106
|
|
@@ -348,7 +348,7 @@
|
|
348
348
|
|
349
349
|
|
350
350
|
|
351
|
-
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(Devas)
|
351
|
+
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(__Devas__)
|
352
352
|
|
353
353
|
|ファイル|メソッド|
|
354
354
|
|
@@ -360,7 +360,7 @@
|
|
360
360
|
|
361
361
|
|
362
362
|
|
363
|
-
"**connect(**" を検索 検索ツール(Devas)
|
363
|
+
"**connect(**" を検索 検索ツール(__Devas__)
|
364
364
|
|
365
365
|
|ファイル|メソッド|
|
366
366
|
|
@@ -374,7 +374,7 @@
|
|
374
374
|
|
375
375
|
|
376
376
|
|
377
|
-
"**configure(**" を検索 検索ツール(Devas)
|
377
|
+
"**configure(**" を検索 検索ツール(__Devas__)
|
378
378
|
|
379
379
|
|ファイル|メソッド|
|
380
380
|
|
@@ -534,9 +534,13 @@
|
|
534
534
|
|
535
535
|
|
536
536
|
|
537
|
-
差分ツール (WinMerge) で
|
537
|
+
差分ツール (**__WinMerge__**) で
|
538
|
+
|
538
|
-
|
539
|
+
MiniBlogApplication.php (サンプルコード) と
|
540
|
+
|
539
|
-
|
541
|
+
MiniBlogApplication.php (orangefarmer さん) を
|
542
|
+
|
543
|
+
比較する
|
540
544
|
|
541
545
|
|
542
546
|
|
@@ -564,13 +568,13 @@
|
|
564
568
|
|
565
569
|
- ログイン機能のデバッグ (or 実装)
|
566
570
|
|
567
|
-
- 写経 未完成
|
571
|
+
- 写経 未完成 (ルーティング registerRoutes) **画像** MiniBlogApplication.phpの比較 参照
|
568
572
|
|
569
573
|
|
570
574
|
|
571
575
|
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
572
576
|
|
573
|
-
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
577
|
+
##### 「NetBeans IDE デバッグ機能」 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
574
578
|
|
575
579
|
|
576
580
|
|
28
微調整
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
> [パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
46
46
|
|
47
|
-
> [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html) (Mac ユーザ
|
47
|
+
> [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html) (Mac ユーザ の NetBeans IDE 使用)
|
48
48
|
|
49
49
|
|
50
50
|
|
@@ -542,9 +542,9 @@
|
|
542
542
|
|
543
543
|
|
544
544
|
|
545
|
-

|
546
|
-
|
546
|
+
|
547
|
-
クリックすると、拡大表示します
|
547
|
+
**画像** MiniBlogApplication.phpの比較 (クリックすると、拡大表示します)
|
548
548
|
|
549
549
|
|
550
550
|
|
@@ -564,7 +564,7 @@
|
|
564
564
|
|
565
565
|
- ログイン機能のデバッグ (or 実装)
|
566
566
|
|
567
|
-
- 写経 未完成? (ルーティング registerRoutes) **
|
567
|
+
- 写経 未完成? (ルーティング registerRoutes) **画像** MiniBlogApplication.phpの比較 参照
|
568
568
|
|
569
569
|
|
570
570
|
|
27
微調整
test
CHANGED
@@ -60,9 +60,9 @@
|
|
60
60
|
|
61
61
|
**【パーフェクトPHP デバッグ 動作環境】**
|
62
62
|
|
63
|
-
|
63
|
+
- XAMPP 5.6.31
|
64
|
-
|
64
|
+
|
65
|
-
|
65
|
+
- NetBeans 8.2
|
66
66
|
|
67
67
|
|
68
68
|
|
@@ -202,6 +202,8 @@
|
|
202
202
|
|
203
203
|
**注 Session 49 は、ブレークポイントではありません**
|
204
204
|
|
205
|
+
[NetBeans デバッグ方法](http://beginner001.html.xdomain.jp/debug-04.html) 参照
|
206
|
+
|
205
207
|
|
206
208
|
|
207
209
|
>
|
@@ -556,11 +558,13 @@
|
|
556
558
|
|
557
559
|
今回のエラーを解決しても、別の不具合が出ます
|
558
560
|
|
559
|
-
|
561
|
+
- ホームページのデータ件数 ゼロ
|
560
|
-
|
562
|
+
|
561
|
-
|
563
|
+
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
562
|
-
|
564
|
+
|
563
|
-
|
565
|
+
- ログイン機能のデバッグ (or 実装)
|
566
|
+
|
567
|
+
- 写経 未完成? (ルーティング registerRoutes) **差分ツール図** 参照
|
564
568
|
|
565
569
|
|
566
570
|
|
26
微調整
test
CHANGED
@@ -44,6 +44,8 @@
|
|
44
44
|
|
45
45
|
> [パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
46
46
|
|
47
|
+
> [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html) (Mac ユーザ が NetBeans IDE を使用)
|
48
|
+
|
47
49
|
|
48
50
|
|
49
51
|
パーフェクトPHP をデバッグしました (学習方法) や
|
25
微調整
test
CHANGED
@@ -104,27 +104,39 @@
|
|
104
104
|
|
105
105
|
|
106
106
|
|
107
|
-
仕様 (ホームページ表示とログイン)
|
107
|
+
サンプルコードの仕様 と orangefarmerさんの仕様 との違い (ホームページ表示とログイン)
|
108
|
-
|
108
|
+
|
109
|
+
|
110
|
+
|
109
|
-
|
111
|
+
> サンプルコードの仕様
|
112
|
+
|
113
|
+
>>
|
110
114
|
|
111
115
|
- ホームページは、**ログイン後**に表示されます
|
112
116
|
|
117
|
+
>>
|
118
|
+
|
113
119
|
- ホームページ (エラー ログ #5 Application->runAction('**status**', '**index**', Array))
|
114
120
|
|
115
|
-
|
116
|
-
|
121
|
+
|
122
|
+
|
117
|
-
|
123
|
+
> orangefarmerさんの仕様
|
124
|
+
|
118
|
-
|
125
|
+
>>
|
126
|
+
|
119
|
-
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス**)
|
127
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス** で 表示は中断)
|
128
|
+
|
129
|
+
>>
|
120
130
|
|
121
131
|
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
122
132
|
|
133
|
+
>>
|
134
|
+
|
123
135
|
- ログインする 仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
124
136
|
|
125
|
-
|
126
|
-
|
137
|
+
|
138
|
+
|
127
|
-
|
139
|
+
デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
128
140
|
|
129
141
|
|
130
142
|
|
@@ -190,21 +202,19 @@
|
|
190
202
|
|
191
203
|
|
192
204
|
|
193
|
-
>
|
205
|
+
>
|
194
|
-
|
195
|
-
|
196
|
-
|
206
|
+
|
197
|
-
デバッグを実行すると、最後に **エラーが再現** されます
|
207
|
+
> デバッグを実行すると、最後に **エラーが再現** されます
|
198
|
-
|
208
|
+
|
199
|
-
「正しい」**データベースへの接続設定 (PDO インスタンス)** の **$this->con** を「壊しています」
|
209
|
+
> 「正しい」**データベースへの接続設定 (PDO インスタンス)** の **$this->con** を「壊しています」
|
200
|
-
|
210
|
+
|
201
|
-
(DbRepository 41* **$this->con** false に変更)
|
211
|
+
> (DbRepository 41* **$this->con** false に変更)
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
212
|
+
|
206
|
-
|
207
|
-
>
|
213
|
+
>
|
214
|
+
|
215
|
+
> エラーの原因は、**DB への接続ミス**です
|
216
|
+
|
217
|
+
>
|
208
218
|
|
209
219
|
|
210
220
|
|
@@ -496,7 +506,7 @@
|
|
496
506
|
|
497
507
|
**上記 3ファイル の メソッド を調べる**
|
498
508
|
|
499
|
-
|
509
|
+
3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
500
510
|
|
501
511
|
MiniBlogApplication.php のみ
|
502
512
|
|
@@ -508,7 +518,7 @@
|
|
508
518
|
|
509
519
|
|
510
520
|
|
511
|
-
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
521
|
+
(MiniBlogApplication.php にエラーがあったので、コードの提示は必要無くなった)
|
512
522
|
|
513
523
|
|
514
524
|
|
@@ -558,15 +568,15 @@
|
|
558
568
|
|
559
569
|
|
560
570
|
|
561
|
-
>
|
571
|
+
>
|
562
|
-
|
563
|
-
|
564
|
-
|
572
|
+
|
565
|
-
NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
573
|
+
> NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
574
|
+
|
566
|
-
|
575
|
+
> 処理の流れ と 変数の値 が分かることで
|
576
|
+
|
567
|
-
「フレームワークの内部」と「オブジェクト指向」を理解するために使
|
577
|
+
> 「フレームワークの内部」と「オブジェクト指向」を理解するために使います
|
568
|
-
|
578
|
+
|
569
|
-
>
|
579
|
+
>
|
570
580
|
|
571
581
|
|
572
582
|
|
@@ -624,7 +634,7 @@
|
|
624
634
|
|
625
635
|
Application の **空** の co**n**figure メソッド
|
626
636
|
|
627
|
-
エラーが無ければ MiniBlogApplication の **データベースへの接続設定** が Application に反映され
|
637
|
+
エラーが無ければ MiniBlogApplication の **データベースへの接続設定** が Application に反映されます
|
628
638
|
|
629
639
|
` protected function configure()` ← co**n**figure
|
630
640
|
|
24
微調整
test
CHANGED
@@ -30,43 +30,531 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
+
> [パーフェクトPHP デバッグ (処理の流れ | ユーザ登録機能作成)](http://beginner001.html.xdomain.jp/debug-02-1.html)
|
34
|
+
|
35
|
+
[パーフェクトPHP デバッグ (チェックポイント)](http://beginner001.html.xdomain.jp/debug-01.html)
|
36
|
+
|
37
|
+
> [パーフェクトPHP デバッグ (その他)](http://beginner001.html.xdomain.jp/debug-03.html) (具体的な 環境設定手順)
|
38
|
+
|
39
|
+
> [パーフェクトPHP デバッグ (**NetBeans デバッグ方法**)](http://beginner001.html.xdomain.jp/debug-04.html) (具体的な デバッグ例)
|
40
|
+
|
41
|
+
>
|
42
|
+
|
43
|
+
> [パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
44
|
+
|
45
|
+
> [パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
パーフェクトPHP をデバッグしました (学習方法) や
|
50
|
+
|
51
|
+
パーフェクトPHP をデバッグしました (やる気のある初心者) に
|
52
|
+
|
53
|
+
書いてありますが、**「写経」はおすすめしません。**
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
**【パーフェクトPHP デバッグ 動作環境】**
|
60
|
+
|
61
|
+
・XAMPP 5.6.31
|
62
|
+
|
63
|
+
・NetBeans 8.2
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
> **学習環境**なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
|
68
|
+
|
69
|
+
> XAMPP 7.x.x でも動作しますが、**Xdebug** の準備が必要です。
|
70
|
+
|
71
|
+
> [XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合](http://beginner001.html.xdomain.jp/debug-03.html#PHP7)
|
72
|
+
|
73
|
+
>
|
74
|
+
|
75
|
+
> サンプルコードは、フレームワークの **使い方** ではなく、
|
76
|
+
|
77
|
+
> フレームワークとオブジェクト指向の **考え方** について書かれているので
|
78
|
+
|
79
|
+
**バージョンは、関係ありません。**
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
---
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
####NetBeans デバッグ方法
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
**【エラーの原因】**
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
**NetBeans IDE デバッグ機能** を使った デバッグ です。
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
注意点
|
100
|
+
|
101
|
+
- 公式サイト サンプルコード(mini-blog.zip) を使用 (不具合 2ヶ所修正)
|
102
|
+
|
103
|
+
- デバッグ中の変数の**変更**は、**メモリ上**です (ファイルは元のまま)
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
仕様 (ホームページ表示とログイン)
|
108
|
+
|
109
|
+
- サンプルコード の仕様
|
110
|
+
|
111
|
+
- ホームページは、**ログイン後**に表示されます
|
112
|
+
|
113
|
+
- ホームページ (エラー ログ #5 Application->runAction('**status**', '**index**', Array))
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
- orangefarmer さん の仕様
|
118
|
+
|
119
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス**)
|
120
|
+
|
121
|
+
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
122
|
+
|
123
|
+
- ログインする 仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
- デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
参考
|
132
|
+
|
133
|
+
- [処理の流れ | ホームページと投稿](http://beginner001.html.xdomain.jp/debug-02-2.html)
|
134
|
+
|
135
|
+
- [処理の流れ | アカウント情報管理とログイン](http://beginner001.html.xdomain.jp/debug-02-4.html)
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
エラー ログ
|
142
|
+
|
143
|
+
- #5 Application->runAction('**status**', '**index**', Array))
|
144
|
+
|
145
|
+
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
146
|
+
|
147
|
+
```
|
148
|
+
|
149
|
+
#6 C:\xampp\htdocs\php-blog.localhost\web\index_dev.php(7): Application->run()
|
150
|
+
|
151
|
+
#5 C:\xampp\htdocs\php-blog.localhost\core\Application.php(103): Application->runAction('status', 'index', Array)
|
152
|
+
|
153
|
+
#4 C:\xampp\htdocs\php-blog.localhost\core\Application.php(123): Controller->run('index', Array)
|
154
|
+
|
155
|
+
#3 C:\xampp\htdocs\php-blog.localhost\core\Controller.php(41): StatusController->indexAction(Array)
|
156
|
+
|
157
|
+
#2 C:\xampp\htdocs\php-blog.localhost\controllers\StatusController.php(8): StatusRepository->fetchAllPersonalArchivesByUserId(NULL)
|
158
|
+
|
159
|
+
#1 C:\xampp\htdocs\php-blog.localhost\models\StatusRepository.php(22): DbRepository->fetchAll('select a.*, u.u...', Array)
|
160
|
+
|
161
|
+
#0 C:\xampp\htdocs\php-blog.localhost\core\DbRepository.php(32): DbRepository->execute('select a.*, u.u...', Array)
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
Fatal error: Call to a member function prepare() on bool
|
166
|
+
|
167
|
+
```
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
NetBeans **ブレークポイント** (3ヶ所設定 *) と **処理順序**
|
174
|
+
|
175
|
+
|PHP|行|内容|次のアクション|
|
176
|
+
|
177
|
+
|:--|--:|:--|:--|
|
178
|
+
|
179
|
+
|Application|184*|$controller("status"), $action("index")|続行 (F5)|
|
180
|
+
|
181
|
+
|Session|103*|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
182
|
+
|
183
|
+
|Session|49 |$default true に変更 (**上記** 仕様)|続行 (F5)|
|
184
|
+
|
185
|
+
|DbRepository|41*|$this->con false に変更|続行 (F5)|
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
**注 Session 49 は、ブレークポイントではありません**
|
190
|
+
|
191
|
+
|
192
|
+
|
33
193
|
>
|
34
194
|
|
35
195
|
|
36
196
|
|
37
|
-
|
197
|
+
デバッグを実行すると、最後に **エラーが再現** されます
|
38
|
-
|
198
|
+
|
39
|
-
|
199
|
+
「正しい」**データベースへの接続設定 (PDO インスタンス)** の **$this->con** を「壊しています」
|
40
|
-
|
200
|
+
|
41
|
-
|
201
|
+
(DbRepository 41* **$this->con** false に変更)
|
42
|
-
|
202
|
+
|
203
|
+
|
204
|
+
|
43
|
-
|
205
|
+
エラーの原因は、**DB への接続ミス**です
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
[パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
48
|
-
|
49
|
-
[パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
50
206
|
|
51
207
|
>
|
52
208
|
|
53
209
|
|
54
210
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
211
|
+
Application.php
|
212
|
+
|
213
|
+
```PHP
|
214
|
+
|
215
|
+
...
|
216
|
+
|
217
|
+
173 public function run()
|
218
|
+
|
219
|
+
174 {
|
220
|
+
|
221
|
+
175 try {
|
222
|
+
|
223
|
+
176 $params = $this->router->resolve($this->request->getPathInfo());
|
224
|
+
|
225
|
+
177 if ($params === false) {
|
226
|
+
|
227
|
+
178 throw new HttpNotFoundException('No route found for ' . $this->request->getPathInfo());
|
228
|
+
|
229
|
+
179 }
|
230
|
+
|
231
|
+
180
|
232
|
+
|
233
|
+
181 $controller = $params['controller'];
|
234
|
+
|
235
|
+
182 $action = $params['action'];
|
236
|
+
|
237
|
+
183
|
238
|
+
|
239
|
+
184* $this->runAction($controller, $action, $params); /* ブレークポイント */
|
240
|
+
|
241
|
+
185 } catch (HttpNotFoundException $e) {
|
242
|
+
|
243
|
+
186 $this->render404Page($e);
|
244
|
+
|
245
|
+
187 } catch (UnauthorizedActionException $e) {
|
246
|
+
|
247
|
+
188 list($controller, $action) = $this->login_action;
|
248
|
+
|
249
|
+
189 $this->runAction($controller, $action);
|
250
|
+
|
251
|
+
190 }
|
252
|
+
|
253
|
+
191
|
254
|
+
|
255
|
+
...
|
256
|
+
|
257
|
+
```
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
Session.php
|
264
|
+
|
265
|
+
```PHP
|
266
|
+
|
267
|
+
...
|
268
|
+
|
269
|
+
43 public function get($name, $default = null)
|
270
|
+
|
271
|
+
44 {
|
272
|
+
|
273
|
+
45 if (isset($_SESSION[$name])) {
|
274
|
+
|
275
|
+
46 return $_SESSION[$name];
|
276
|
+
|
277
|
+
47 }
|
278
|
+
|
279
|
+
48
|
280
|
+
|
281
|
+
49 return $default; /* $default true に変更 */
|
282
|
+
|
283
|
+
50 }
|
284
|
+
|
285
|
+
...
|
286
|
+
|
287
|
+
101 public function isAuthenticated()
|
288
|
+
|
289
|
+
102 {
|
290
|
+
|
291
|
+
103* return $this->get('_authenticated', false); /* ブレークポイント */
|
292
|
+
|
293
|
+
104 }
|
294
|
+
|
295
|
+
...
|
296
|
+
|
297
|
+
```
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
DbRepository.php
|
304
|
+
|
305
|
+
```PHP
|
306
|
+
|
307
|
+
...
|
308
|
+
|
309
|
+
39 public function execute($sql, $params = array())
|
310
|
+
|
311
|
+
40 {
|
312
|
+
|
313
|
+
41* $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
314
|
+
|
315
|
+
42 $stmt->execute($params);
|
316
|
+
|
317
|
+
43
|
318
|
+
|
319
|
+
44 return $stmt;
|
320
|
+
|
321
|
+
45 }
|
322
|
+
|
323
|
+
...
|
324
|
+
|
325
|
+
```
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
+
---
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
**【コードを調べる】**
|
334
|
+
|
335
|
+
|
336
|
+
|
337
|
+
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(Devas)
|
338
|
+
|
339
|
+
|ファイル|メソッド|
|
340
|
+
|
341
|
+
|:--|:--|
|
342
|
+
|
343
|
+
|DbManager.php |public function **connect(**$name, $params)|
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
"**connect(**" を検索 検索ツール(Devas)
|
350
|
+
|
351
|
+
|ファイル|メソッド|
|
352
|
+
|
353
|
+
|:--|:--|
|
354
|
+
|
355
|
+
|MiniBlogApplication.php|protected function **configure(**)|
|
356
|
+
|
357
|
+
|~~DbManager.php~~|~~public function connect($name, $params)~~ 同上|
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
"**configure(**" を検索 検索ツール(Devas)
|
364
|
+
|
365
|
+
|ファイル|メソッド|
|
366
|
+
|
367
|
+
|:--|:--|
|
368
|
+
|
369
|
+
|~~MiniBlogApplication.php~~|~~protected function configure()~~ 同上|
|
370
|
+
|
371
|
+
|Application.php|public function __construct($debug = false)|
|
372
|
+
|
373
|
+
|Application.php|protected function configure()|
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
DbManager.php
|
380
|
+
|
381
|
+
```PHP
|
382
|
+
|
383
|
+
...
|
384
|
+
|
385
|
+
20 public function connect($name, $params)
|
386
|
+
|
387
|
+
21 {
|
388
|
+
|
389
|
+
22 $params = array_merge(array(
|
390
|
+
|
391
|
+
23 'dsn' => null,
|
392
|
+
|
393
|
+
24 'user' => '',
|
394
|
+
|
395
|
+
25 'password' => '',
|
396
|
+
|
397
|
+
26 'options' => array(),
|
398
|
+
|
399
|
+
27 ), $params);
|
400
|
+
|
401
|
+
28
|
402
|
+
|
403
|
+
29 $con = new PDO( /* "new PDO" を検索 */
|
404
|
+
|
405
|
+
30 $params['dsn'],
|
406
|
+
|
407
|
+
31 $params['user'],
|
408
|
+
|
409
|
+
32 $params['password'],
|
410
|
+
|
411
|
+
33 $params['options']
|
412
|
+
|
413
|
+
34 );
|
414
|
+
|
415
|
+
35
|
416
|
+
|
417
|
+
36 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
418
|
+
|
419
|
+
37
|
420
|
+
|
421
|
+
38 $this->connections[$name] = $con;
|
422
|
+
|
423
|
+
39 }
|
424
|
+
|
425
|
+
...
|
426
|
+
|
427
|
+
```
|
428
|
+
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
MiniBlogApplication.php
|
434
|
+
|
435
|
+
```PHP
|
436
|
+
|
437
|
+
...
|
438
|
+
|
439
|
+
37 protected function configure()
|
440
|
+
|
441
|
+
38 {
|
442
|
+
|
443
|
+
39 $this->db_manager->connect('master', array(
|
444
|
+
|
445
|
+
40 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',
|
446
|
+
|
447
|
+
41 'user' => 'root',
|
448
|
+
|
449
|
+
42 'password' => '',
|
450
|
+
|
451
|
+
43 ));
|
452
|
+
|
453
|
+
44 }
|
454
|
+
|
455
|
+
...
|
456
|
+
|
457
|
+
```
|
458
|
+
|
459
|
+
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
Application.php
|
464
|
+
|
465
|
+
```PHP
|
466
|
+
|
467
|
+
...
|
468
|
+
|
469
|
+
21 public function __construct($debug = false)
|
470
|
+
|
471
|
+
22 {
|
472
|
+
|
473
|
+
23 $this->setDebugMode($debug);
|
474
|
+
|
475
|
+
24 $this->initialize();
|
476
|
+
|
477
|
+
25 $this->configure();
|
478
|
+
|
479
|
+
26 }
|
480
|
+
|
481
|
+
...
|
482
|
+
|
483
|
+
60 protected function configure()
|
484
|
+
|
485
|
+
61 {
|
486
|
+
|
487
|
+
62 }
|
488
|
+
|
489
|
+
...
|
490
|
+
|
491
|
+
```
|
492
|
+
|
493
|
+
|
494
|
+
|
495
|
+
|
496
|
+
|
497
|
+
**上記 3ファイル の メソッド を調べる**
|
498
|
+
|
499
|
+
上記 3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
500
|
+
|
501
|
+
MiniBlogApplication.php のみ
|
502
|
+
|
503
|
+
|
504
|
+
|
505
|
+
MiniBlogApplication.php に**エラーが無い場合**
|
506
|
+
|
507
|
+
DbManager.php と Application.php のコード提示をしてもらう予定
|
508
|
+
|
509
|
+
|
510
|
+
|
511
|
+
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
---
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+
**【修正箇所が分かる & NetBeans IDE デバッグ機能】**
|
520
|
+
|
521
|
+
|
522
|
+
|
523
|
+
差分ツール (WinMerge) で
|
524
|
+
|
525
|
+
サンプルコード の MiniBlogApplication.php と orangefarmer さんの MiniBlogApplication.php を比較する
|
526
|
+
|
527
|
+
|
528
|
+
|
529
|
+
|
530
|
+
|
531
|
+

|
532
|
+
|
533
|
+
クリックすると、拡大表示します
|
534
|
+
|
535
|
+
|
536
|
+
|
537
|
+
正 protected function co**n**figure()
|
538
|
+
|
539
|
+
誤 protected function cofigure()
|
540
|
+
|
541
|
+
|
542
|
+
|
543
|
+
|
544
|
+
|
545
|
+
今回のエラーを解決しても、別の不具合が出ます
|
546
|
+
|
547
|
+
・ホームページのデータ件数 ゼロ
|
548
|
+
|
549
|
+
・エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
550
|
+
|
551
|
+
・ログイン機能のデバッグ (or 実装)
|
552
|
+
|
553
|
+
|
554
|
+
|
555
|
+
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
556
|
+
|
557
|
+
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
70
558
|
|
71
559
|
|
72
560
|
|
@@ -74,522 +562,22 @@
|
|
74
562
|
|
75
563
|
|
76
564
|
|
77
|
-
**学習環境**なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
|
78
|
-
|
79
|
-
XAMPP 7.x.x でも動作しますが、**Xdebug** の準備が必要です。
|
80
|
-
|
81
|
-
[XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合](http://beginner001.html.xdomain.jp/debug-03.html#PHP7)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
565
|
+
NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
86
|
-
|
566
|
+
|
87
|
-
フレームワークとオブジェクト指向
|
567
|
+
「フレームワークの内部」と「オブジェクト指向」を理解するために使用します
|
88
|
-
|
89
|
-
**バージョンは、関係ありません。**
|
90
568
|
|
91
569
|
>
|
92
570
|
|
93
571
|
|
94
572
|
|
573
|
+
詳細は、**参考サイトのリンク** をご覧ください
|
574
|
+
|
575
|
+
|
576
|
+
|
95
577
|
---
|
96
578
|
|
97
579
|
|
98
580
|
|
99
|
-
####NetBeans デバッグ方法
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
**【エラーの原因】**
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
**NetBeans IDE デバッグ機能** を使った デバッグ です。
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
注意点
|
112
|
-
|
113
|
-
- 公式サイト サンプルコード(mini-blog.zip) を使用 (不具合 2ヶ所修正)
|
114
|
-
|
115
|
-
- デバッグ中の変数の**変更**は、**メモリ上**です (ファイルは元のまま)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
仕様 (ホームページ表示とログイン)
|
120
|
-
|
121
|
-
- サンプルコード の仕様
|
122
|
-
|
123
|
-
- ホームページは、**ログイン後**に表示されます
|
124
|
-
|
125
|
-
- ホームページ (エラー ログ #5 Application->runAction('**status**', '**index**', Array))
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
- orangefarmer さん の仕様
|
130
|
-
|
131
|
-
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス**)
|
132
|
-
|
133
|
-
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
134
|
-
|
135
|
-
- ログインする 仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
- デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
参考
|
144
|
-
|
145
|
-
- [処理の流れ | ホームページと投稿](http://beginner001.html.xdomain.jp/debug-02-2.html)
|
146
|
-
|
147
|
-
- [処理の流れ | アカウント情報管理とログイン](http://beginner001.html.xdomain.jp/debug-02-4.html)
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
エラー ログ
|
154
|
-
|
155
|
-
- #5 Application->runAction('**status**', '**index**', Array))
|
156
|
-
|
157
|
-
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
158
|
-
|
159
|
-
```
|
160
|
-
|
161
|
-
#6 C:\xampp\htdocs\php-blog.localhost\web\index_dev.php(7): Application->run()
|
162
|
-
|
163
|
-
#5 C:\xampp\htdocs\php-blog.localhost\core\Application.php(103): Application->runAction('status', 'index', Array)
|
164
|
-
|
165
|
-
#4 C:\xampp\htdocs\php-blog.localhost\core\Application.php(123): Controller->run('index', Array)
|
166
|
-
|
167
|
-
#3 C:\xampp\htdocs\php-blog.localhost\core\Controller.php(41): StatusController->indexAction(Array)
|
168
|
-
|
169
|
-
#2 C:\xampp\htdocs\php-blog.localhost\controllers\StatusController.php(8): StatusRepository->fetchAllPersonalArchivesByUserId(NULL)
|
170
|
-
|
171
|
-
#1 C:\xampp\htdocs\php-blog.localhost\models\StatusRepository.php(22): DbRepository->fetchAll('select a.*, u.u...', Array)
|
172
|
-
|
173
|
-
#0 C:\xampp\htdocs\php-blog.localhost\core\DbRepository.php(32): DbRepository->execute('select a.*, u.u...', Array)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
Fatal error: Call to a member function prepare() on bool
|
178
|
-
|
179
|
-
```
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
NetBeans **ブレークポイント** (3ヶ所設定 *) と **処理順序**
|
186
|
-
|
187
|
-
|PHP|行|内容|次のアクション|
|
188
|
-
|
189
|
-
|:--|--:|:--|:--|
|
190
|
-
|
191
|
-
|Application|184*|$controller("status"), $action("index")|続行 (F5)|
|
192
|
-
|
193
|
-
|Session|103*|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
194
|
-
|
195
|
-
|Session|49 |$default true に変更 (**上記** 仕様)|続行 (F5)|
|
196
|
-
|
197
|
-
|DbRepository|41*|$this->con false に変更|続行 (F5)|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
**注 Session 49 は、ブレークポイントではありません**
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
>
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
デバッグを実行すると、最後に **エラーが再現** されます
|
210
|
-
|
211
|
-
「正しい」**データベースへの接続設定 (PDO インスタンス)** の **$this->con** を「壊しています」
|
212
|
-
|
213
|
-
(DbRepository 41* **$this->con** false に変更)
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
エラーの原因は、**DB への接続ミス**です
|
218
|
-
|
219
|
-
>
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
Application.php
|
224
|
-
|
225
|
-
```PHP
|
226
|
-
|
227
|
-
...
|
228
|
-
|
229
|
-
173 public function run()
|
230
|
-
|
231
|
-
174 {
|
232
|
-
|
233
|
-
175 try {
|
234
|
-
|
235
|
-
176 $params = $this->router->resolve($this->request->getPathInfo());
|
236
|
-
|
237
|
-
177 if ($params === false) {
|
238
|
-
|
239
|
-
178 throw new HttpNotFoundException('No route found for ' . $this->request->getPathInfo());
|
240
|
-
|
241
|
-
179 }
|
242
|
-
|
243
|
-
180
|
244
|
-
|
245
|
-
181 $controller = $params['controller'];
|
246
|
-
|
247
|
-
182 $action = $params['action'];
|
248
|
-
|
249
|
-
183
|
250
|
-
|
251
|
-
184* $this->runAction($controller, $action, $params); /* ブレークポイント */
|
252
|
-
|
253
|
-
185 } catch (HttpNotFoundException $e) {
|
254
|
-
|
255
|
-
186 $this->render404Page($e);
|
256
|
-
|
257
|
-
187 } catch (UnauthorizedActionException $e) {
|
258
|
-
|
259
|
-
188 list($controller, $action) = $this->login_action;
|
260
|
-
|
261
|
-
189 $this->runAction($controller, $action);
|
262
|
-
|
263
|
-
190 }
|
264
|
-
|
265
|
-
191
|
266
|
-
|
267
|
-
...
|
268
|
-
|
269
|
-
```
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
Session.php
|
276
|
-
|
277
|
-
```PHP
|
278
|
-
|
279
|
-
...
|
280
|
-
|
281
|
-
43 public function get($name, $default = null)
|
282
|
-
|
283
|
-
44 {
|
284
|
-
|
285
|
-
45 if (isset($_SESSION[$name])) {
|
286
|
-
|
287
|
-
46 return $_SESSION[$name];
|
288
|
-
|
289
|
-
47 }
|
290
|
-
|
291
|
-
48
|
292
|
-
|
293
|
-
49 return $default; /* $default true に変更 */
|
294
|
-
|
295
|
-
50 }
|
296
|
-
|
297
|
-
...
|
298
|
-
|
299
|
-
101 public function isAuthenticated()
|
300
|
-
|
301
|
-
102 {
|
302
|
-
|
303
|
-
103* return $this->get('_authenticated', false); /* ブレークポイント */
|
304
|
-
|
305
|
-
104 }
|
306
|
-
|
307
|
-
...
|
308
|
-
|
309
|
-
```
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
DbRepository.php
|
316
|
-
|
317
|
-
```PHP
|
318
|
-
|
319
|
-
...
|
320
|
-
|
321
|
-
39 public function execute($sql, $params = array())
|
322
|
-
|
323
|
-
40 {
|
324
|
-
|
325
|
-
41* $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
326
|
-
|
327
|
-
42 $stmt->execute($params);
|
328
|
-
|
329
|
-
43
|
330
|
-
|
331
|
-
44 return $stmt;
|
332
|
-
|
333
|
-
45 }
|
334
|
-
|
335
|
-
...
|
336
|
-
|
337
|
-
```
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
---
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
**【コードを調べる】**
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(Devas)
|
350
|
-
|
351
|
-
|ファイル|メソッド|
|
352
|
-
|
353
|
-
|:--|:--|
|
354
|
-
|
355
|
-
|DbManager.php |public function **connect(**$name, $params)|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
"**connect(**" を検索 検索ツール(Devas)
|
362
|
-
|
363
|
-
|ファイル|メソッド|
|
364
|
-
|
365
|
-
|:--|:--|
|
366
|
-
|
367
|
-
|MiniBlogApplication.php|protected function **configure(**)|
|
368
|
-
|
369
|
-
|~~DbManager.php~~|~~public function connect($name, $params)~~ 同上|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
"**configure(**" を検索 検索ツール(Devas)
|
376
|
-
|
377
|
-
|ファイル|メソッド|
|
378
|
-
|
379
|
-
|:--|:--|
|
380
|
-
|
381
|
-
|~~MiniBlogApplication.php~~|~~protected function configure()~~ 同上|
|
382
|
-
|
383
|
-
|Application.php|public function __construct($debug = false)|
|
384
|
-
|
385
|
-
|Application.php|protected function configure()|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
DbManager.php
|
392
|
-
|
393
|
-
```PHP
|
394
|
-
|
395
|
-
...
|
396
|
-
|
397
|
-
20 public function connect($name, $params)
|
398
|
-
|
399
|
-
21 {
|
400
|
-
|
401
|
-
22 $params = array_merge(array(
|
402
|
-
|
403
|
-
23 'dsn' => null,
|
404
|
-
|
405
|
-
24 'user' => '',
|
406
|
-
|
407
|
-
25 'password' => '',
|
408
|
-
|
409
|
-
26 'options' => array(),
|
410
|
-
|
411
|
-
27 ), $params);
|
412
|
-
|
413
|
-
28
|
414
|
-
|
415
|
-
29 $con = new PDO( /* "new PDO" を検索 */
|
416
|
-
|
417
|
-
30 $params['dsn'],
|
418
|
-
|
419
|
-
31 $params['user'],
|
420
|
-
|
421
|
-
32 $params['password'],
|
422
|
-
|
423
|
-
33 $params['options']
|
424
|
-
|
425
|
-
34 );
|
426
|
-
|
427
|
-
35
|
428
|
-
|
429
|
-
36 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
430
|
-
|
431
|
-
37
|
432
|
-
|
433
|
-
38 $this->connections[$name] = $con;
|
434
|
-
|
435
|
-
39 }
|
436
|
-
|
437
|
-
...
|
438
|
-
|
439
|
-
```
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
MiniBlogApplication.php
|
446
|
-
|
447
|
-
```PHP
|
448
|
-
|
449
|
-
...
|
450
|
-
|
451
|
-
37 protected function configure()
|
452
|
-
|
453
|
-
38 {
|
454
|
-
|
455
|
-
39 $this->db_manager->connect('master', array(
|
456
|
-
|
457
|
-
40 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',
|
458
|
-
|
459
|
-
41 'user' => 'root',
|
460
|
-
|
461
|
-
42 'password' => '',
|
462
|
-
|
463
|
-
43 ));
|
464
|
-
|
465
|
-
44 }
|
466
|
-
|
467
|
-
...
|
468
|
-
|
469
|
-
```
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
Application.php
|
476
|
-
|
477
|
-
```PHP
|
478
|
-
|
479
|
-
...
|
480
|
-
|
481
|
-
21 public function __construct($debug = false)
|
482
|
-
|
483
|
-
22 {
|
484
|
-
|
485
|
-
23 $this->setDebugMode($debug);
|
486
|
-
|
487
|
-
24 $this->initialize();
|
488
|
-
|
489
|
-
25 $this->configure();
|
490
|
-
|
491
|
-
26 }
|
492
|
-
|
493
|
-
...
|
494
|
-
|
495
|
-
60 protected function configure()
|
496
|
-
|
497
|
-
61 {
|
498
|
-
|
499
|
-
62 }
|
500
|
-
|
501
|
-
...
|
502
|
-
|
503
|
-
```
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
**上記 3ファイル の メソッド を調べる**
|
510
|
-
|
511
|
-
上記 3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
512
|
-
|
513
|
-
MiniBlogApplication.php のみ
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
MiniBlogApplication.php に**エラーが無い場合**
|
518
|
-
|
519
|
-
DbManager.php と Application.php のコード提示をしてもらう予定
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
---
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
**【修正箇所が分かる & NetBeans IDE デバッグ機能】**
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
差分ツール (WinMerge) で
|
536
|
-
|
537
|
-
サンプルコード の MiniBlogApplication.php と orangefarmer さんの MiniBlogApplication.php を比較する
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-

|
544
|
-
|
545
|
-
クリックすると、拡大表示します
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
正 protected function co**n**figure()
|
550
|
-
|
551
|
-
誤 protected function cofigure()
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
今回のエラーを解決しても、別の不具合が出ます
|
558
|
-
|
559
|
-
・ホームページのデータ件数 ゼロ
|
560
|
-
|
561
|
-
・エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
562
|
-
|
563
|
-
・ログイン機能のデバッグ (or 実装)
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
568
|
-
|
569
|
-
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
>
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
578
|
-
|
579
|
-
「フレームワークの内部」と「オブジェクト指向」を理解するために使用します
|
580
|
-
|
581
|
-
>
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
詳細は、**参考サイトのリンク** をご覧ください
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
---
|
590
|
-
|
591
|
-
|
592
|
-
|
593
581
|
【エラーの理由】
|
594
582
|
|
595
583
|
|
23
微調整
test
CHANGED
@@ -30,23 +30,27 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
+
>
|
34
|
+
|
35
|
+
|
36
|
+
|
33
37
|
[パーフェクトPHP デバッグ (処理の流れ | ユーザ登録機能作成)](http://beginner001.html.xdomain.jp/debug-02-1.html)
|
34
38
|
|
35
|
-
[パーフェクトPHP デバッグ (チェックポイント)](http://beginner001.html.xdomain.jp/debug-01.html)
|
39
|
+
[パーフェクトPHP デバッグ (チェックポイント)](http://beginner001.html.xdomain.jp/debug-01.html)
|
36
40
|
|
37
41
|
[パーフェクトPHP デバッグ (その他)](http://beginner001.html.xdomain.jp/debug-03.html) (具体的な 環境設定手順)
|
38
42
|
|
39
43
|
[パーフェクトPHP デバッグ (**NetBeans デバッグ方法**)](http://beginner001.html.xdomain.jp/debug-04.html) (具体的な デバッグ例)
|
40
44
|
|
41
|
-
|
45
|
+
|
42
46
|
|
43
47
|
[パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
44
48
|
|
45
49
|
[パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
46
50
|
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
>
|
52
|
+
|
53
|
+
|
50
54
|
|
51
55
|
パーフェクトPHP をデバッグしました (学習方法) や
|
52
56
|
|
@@ -66,13 +70,17 @@
|
|
66
70
|
|
67
71
|
|
68
72
|
|
73
|
+
>
|
74
|
+
|
75
|
+
|
76
|
+
|
69
77
|
**学習環境**なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
|
70
78
|
|
71
79
|
XAMPP 7.x.x でも動作しますが、**Xdebug** の準備が必要です。
|
72
80
|
|
73
81
|
[XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合](http://beginner001.html.xdomain.jp/debug-03.html#PHP7)
|
74
82
|
|
75
|
-
|
83
|
+
|
76
84
|
|
77
85
|
サンプルコードは、フレームワークの **使い方** ではなく、
|
78
86
|
|
@@ -80,6 +88,8 @@
|
|
80
88
|
|
81
89
|
**バージョンは、関係ありません。**
|
82
90
|
|
91
|
+
>
|
92
|
+
|
83
93
|
|
84
94
|
|
85
95
|
---
|
22
微調整
test
CHANGED
@@ -336,7 +336,7 @@
|
|
336
336
|
|
337
337
|
|
338
338
|
|
339
|
-
"**new PDO**" を検索 検索ツール(Devas)
|
339
|
+
「**DB への接続** のスタートである」"**new PDO**" を検索 検索ツール(Devas)
|
340
340
|
|
341
341
|
|ファイル|メソッド|
|
342
342
|
|
@@ -626,6 +626,8 @@
|
|
626
626
|
|
627
627
|
Application の **空** の co**n**figure メソッド
|
628
628
|
|
629
|
+
エラーが無ければ MiniBlogApplication の **データベースへの接続設定** が Application に反映される
|
630
|
+
|
629
631
|
` protected function configure()` ← co**n**figure
|
630
632
|
|
631
633
|
` {`
|
21
微調整
test
CHANGED
@@ -576,18 +576,6 @@
|
|
576
576
|
|
577
577
|
|
578
578
|
|
579
|
-
>
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
経験者「デバッグ環境を作ってください」
|
584
|
-
|
585
|
-
初心者「分かりました」 (... 作り方が分からない?) (... 作れなかった!)
|
586
|
-
|
587
|
-
>
|
588
|
-
|
589
|
-
|
590
|
-
|
591
579
|
---
|
592
580
|
|
593
581
|
|
20
微調整
test
CHANGED
@@ -178,13 +178,13 @@
|
|
178
178
|
|
179
179
|
|:--|--:|:--|:--|
|
180
180
|
|
181
|
-
|Application|
|
181
|
+
|Application|184*|$controller("status"), $action("index")|続行 (F5)|
|
182
|
-
|
182
|
+
|
183
|
-
|Session|
|
183
|
+
|Session|103*|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
184
|
-
|
184
|
+
|
185
|
-
|Session|49|$default true に変更 (**上記** 仕様)|続行 (F5)|
|
185
|
+
|Session|49 |$default true に変更 (**上記** 仕様)|続行 (F5)|
|
186
|
-
|
186
|
+
|
187
|
-
|DbRepository|
|
187
|
+
|DbRepository|41*|$this->con false に変更|続行 (F5)|
|
188
188
|
|
189
189
|
|
190
190
|
|
@@ -192,19 +192,23 @@
|
|
192
192
|
|
193
193
|
|
194
194
|
|
195
|
+
>
|
196
|
+
|
197
|
+
|
198
|
+
|
195
199
|
デバッグを実行すると、最後に **エラーが再現** されます
|
196
200
|
|
197
|
-
正しい
|
201
|
+
「正しい」**データベースへの接続設定 (PDO インスタンス)** の **$this->con** を「壊しています」
|
198
|
-
|
202
|
+
|
199
|
-
(DbRepository
|
203
|
+
(DbRepository 41* **$this->con** false に変更)
|
200
|
-
|
201
|
-
|
204
|
+
|
205
|
+
|
202
206
|
|
203
207
|
エラーの原因は、**DB への接続ミス**です
|
204
208
|
|
205
|
-
|
209
|
+
>
|
206
|
-
|
207
|
-
|
210
|
+
|
211
|
+
|
208
212
|
|
209
213
|
Application.php
|
210
214
|
|
@@ -234,7 +238,7 @@
|
|
234
238
|
|
235
239
|
183
|
236
240
|
|
237
|
-
184
|
241
|
+
184* $this->runAction($controller, $action, $params); /* ブレークポイント */
|
238
242
|
|
239
243
|
185 } catch (HttpNotFoundException $e) {
|
240
244
|
|
@@ -286,7 +290,7 @@
|
|
286
290
|
|
287
291
|
102 {
|
288
292
|
|
289
|
-
103
|
293
|
+
103* return $this->get('_authenticated', false); /* ブレークポイント */
|
290
294
|
|
291
295
|
104 }
|
292
296
|
|
@@ -308,7 +312,7 @@
|
|
308
312
|
|
309
313
|
40 {
|
310
314
|
|
311
|
-
41
|
315
|
+
41* $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
312
316
|
|
313
317
|
42 $stmt->execute($params);
|
314
318
|
|
@@ -504,6 +508,8 @@
|
|
504
508
|
|
505
509
|
DbManager.php と Application.php のコード提示をしてもらう予定
|
506
510
|
|
511
|
+
|
512
|
+
|
507
513
|
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
508
514
|
|
509
515
|
|
@@ -512,7 +518,7 @@
|
|
512
518
|
|
513
519
|
|
514
520
|
|
515
|
-
**【修正箇所が分かる】**
|
521
|
+
**【修正箇所が分かる & NetBeans IDE デバッグ機能】**
|
516
522
|
|
517
523
|
|
518
524
|
|
@@ -552,10 +558,36 @@
|
|
552
558
|
|
553
559
|
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
554
560
|
|
561
|
+
|
562
|
+
|
563
|
+
>
|
564
|
+
|
565
|
+
|
566
|
+
|
567
|
+
NetBeans IDE デバッグ機能 は、**バグを見つけるためではなく**
|
568
|
+
|
569
|
+
「フレームワークの内部」と「オブジェクト指向」を理解するために使用します
|
570
|
+
|
571
|
+
>
|
572
|
+
|
573
|
+
|
574
|
+
|
555
575
|
詳細は、**参考サイトのリンク** をご覧ください
|
556
576
|
|
557
577
|
|
558
578
|
|
579
|
+
>
|
580
|
+
|
581
|
+
|
582
|
+
|
583
|
+
経験者「デバッグ環境を作ってください」
|
584
|
+
|
585
|
+
初心者「分かりました」 (... 作り方が分からない?) (... 作れなかった!)
|
586
|
+
|
587
|
+
>
|
588
|
+
|
589
|
+
|
590
|
+
|
559
591
|
---
|
560
592
|
|
561
593
|
|
19
微調整
test
CHANGED
@@ -328,7 +328,7 @@
|
|
328
328
|
|
329
329
|
|
330
330
|
|
331
|
-
**【
|
331
|
+
**【コードを調べる】**
|
332
332
|
|
333
333
|
|
334
334
|
|
18
微調整
test
CHANGED
@@ -570,7 +570,7 @@
|
|
570
570
|
|
571
571
|
|
572
572
|
|
573
|
-
`class MiniBlogApplication extends Application`
|
573
|
+
`class MiniBlogApplication extends Application` ← **extends** (継承)
|
574
574
|
|
575
575
|
`{`
|
576
576
|
|
@@ -584,7 +584,7 @@
|
|
584
584
|
|
585
585
|
MiniBlogApplication の cofigure メソッド
|
586
586
|
|
587
|
-
` protected function cofigure()`
|
587
|
+
` protected function cofigure()` ← **オーバライドできない** (co**n**figure でないため)
|
588
588
|
|
589
589
|
` {` ↓ 以下 **データベースへの接続設定**
|
590
590
|
|
@@ -606,7 +606,7 @@
|
|
606
606
|
|
607
607
|
Application の **空** の co**n**figure メソッド
|
608
608
|
|
609
|
-
` protected function configure()`
|
609
|
+
` protected function configure()` ← co**n**figure
|
610
610
|
|
611
611
|
` {`
|
612
612
|
|
@@ -626,6 +626,6 @@
|
|
626
626
|
|
627
627
|
` $this->initialize();`
|
628
628
|
|
629
|
-
` $this->configure();`
|
629
|
+
` $this->configure();` ← **空** のメソッドのまま co**n**figure (データベースへの接続設定 が **未定義**)
|
630
630
|
|
631
631
|
` }`
|
17
微調整
test
CHANGED
@@ -502,7 +502,7 @@
|
|
502
502
|
|
503
503
|
MiniBlogApplication.php に**エラーが無い場合**
|
504
504
|
|
505
|
-
DbManager.php と Application.php のコード提示してもらう予定
|
505
|
+
DbManager.php と Application.php のコード提示をしてもらう予定
|
506
506
|
|
507
507
|
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
508
508
|
|
16
微調整
test
CHANGED
@@ -82,36 +82,6 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
**【Windows MAMP】**
|
88
|
-
|
89
|
-
- XAMPP でも同じことができます
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
**【Macintosh MAMP】**
|
94
|
-
|
95
|
-
- [ついにデバッグの環境が整った](https://blogs.yahoo.co.jp/amegrapsp/41541779.html)
|
96
|
-
|
97
|
-
- [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html)
|
98
|
-
|
99
|
-
- [ようやく解決の糸口が見つかった](https://blogs.yahoo.co.jp/amegrapsp/41541352.html)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
上のサイトの管理人は、**プログラム初心者** & **NetBeans IDE デバッグ機能 初めて**
|
104
|
-
|
105
|
-
で、「写経」のバグを解決した優秀な方です。
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
Macintosh MAMP の **Xdebug** についても書かれています。
|
110
|
-
|
111
|
-
「多分」問合せもできると思います。
|
112
|
-
|
113
|
-
|
114
|
-
|
115
85
|
---
|
116
86
|
|
117
87
|
|
15
MAMP について 追加
test
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
|
69
69
|
**学習環境**なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
|
70
70
|
|
71
|
-
XAMPP 7.x.x でも動作しますが、Xdebug の準備が必要です。
|
71
|
+
XAMPP 7.x.x でも動作しますが、**Xdebug** の準備が必要です。
|
72
72
|
|
73
73
|
[XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合](http://beginner001.html.xdomain.jp/debug-03.html#PHP7)
|
74
74
|
|
@@ -82,6 +82,36 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
+
|
86
|
+
|
87
|
+
**【Windows MAMP】**
|
88
|
+
|
89
|
+
- XAMPP でも同じことができます
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
**【Macintosh MAMP】**
|
94
|
+
|
95
|
+
- [ついにデバッグの環境が整った](https://blogs.yahoo.co.jp/amegrapsp/41541779.html)
|
96
|
+
|
97
|
+
- [NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html)
|
98
|
+
|
99
|
+
- [ようやく解決の糸口が見つかった](https://blogs.yahoo.co.jp/amegrapsp/41541352.html)
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
上のサイトの管理人は、**プログラム初心者** & **NetBeans IDE デバッグ機能 初めて**
|
104
|
+
|
105
|
+
で、「写経」のバグを解決した優秀な方です。
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
Macintosh MAMP の **Xdebug** についても書かれています。
|
110
|
+
|
111
|
+
「多分」問合せもできると思います。
|
112
|
+
|
113
|
+
|
114
|
+
|
85
115
|
---
|
86
116
|
|
87
117
|
|
14
微調整
test
CHANGED
@@ -112,15 +112,15 @@
|
|
112
112
|
|
113
113
|
- ホームページは、**ログイン後**に表示されます
|
114
114
|
|
115
|
-
- ホームページ (#5 Application->runAction('**status**', '**index**', Array))
|
115
|
+
- ホームページ (エラー ログ #5 Application->runAction('**status**', '**index**', Array))
|
116
116
|
|
117
117
|
|
118
118
|
|
119
119
|
- orangefarmer さん の仕様
|
120
120
|
|
121
|
-
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス**
|
121
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス**)
|
122
|
-
|
122
|
+
|
123
|
-
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
123
|
+
- エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
124
124
|
|
125
125
|
- ログインする 仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
126
126
|
|
@@ -142,6 +142,10 @@
|
|
142
142
|
|
143
143
|
エラー ログ
|
144
144
|
|
145
|
+
- #5 Application->runAction('**status**', '**index**', Array))
|
146
|
+
|
147
|
+
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
148
|
+
|
145
149
|
```
|
146
150
|
|
147
151
|
#6 C:\xampp\htdocs\php-blog.localhost\web\index_dev.php(7): Application->run()
|
@@ -190,7 +194,9 @@
|
|
190
194
|
|
191
195
|
デバッグを実行すると、最後に **エラーが再現** されます
|
192
196
|
|
193
|
-
正しい **データベースへの接続設定 (PDO インスタンス)** $this->con を壊しています
|
197
|
+
正しい **データベースへの接続設定 (PDO インスタンス)** の $this->con を「壊しています」
|
198
|
+
|
199
|
+
(DbRepository *41 **$this->con** false)
|
194
200
|
|
195
201
|
|
196
202
|
|
@@ -534,9 +540,11 @@
|
|
534
540
|
|
535
541
|
今回のエラーを解決しても、別の不具合が出ます
|
536
542
|
|
537
|
-
ホームページのデータ件数 ゼロ
|
543
|
+
・ホームページのデータ件数 ゼロ
|
538
|
-
|
544
|
+
|
539
|
-
|
545
|
+
・エラー ログ #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
546
|
+
|
547
|
+
・ログイン機能のデバッグ (or 実装)
|
540
548
|
|
541
549
|
|
542
550
|
|
@@ -618,6 +626,6 @@
|
|
618
626
|
|
619
627
|
` $this->initialize();`
|
620
628
|
|
621
|
-
` $this->configure();` ← **空** のメソッド co**n**figure (データベースへの接続設定 が **未定義**)
|
629
|
+
` $this->configure();` ← **空** のメソッドのまま co**n**figure (データベースへの接続設定 が **未定義**)
|
622
630
|
|
623
631
|
` }`
|
13
微調整
test
CHANGED
@@ -94,7 +94,7 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
**NetBeans IDE デバッグ機能** を使った デバッグ
|
97
|
+
**NetBeans IDE デバッグ機能** を使った デバッグ です。
|
98
98
|
|
99
99
|
|
100
100
|
|
@@ -532,21 +532,17 @@
|
|
532
532
|
|
533
533
|
|
534
534
|
|
535
|
-
エラーを解決しても、
|
535
|
+
今回のエラーを解決しても、別の不具合が出ます
|
536
|
-
|
536
|
+
|
537
|
-
ホームページのデータ件数
|
537
|
+
ホームページのデータ件数 ゼロ
|
538
|
-
|
538
|
+
|
539
|
-
|
539
|
+
#2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
540
|
-
|
541
|
-
|
542
|
-
|
540
|
+
|
541
|
+
|
542
|
+
|
543
|
-
写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
543
|
+
すべての写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
544
|
-
|
545
|
-
|
544
|
+
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しま
|
545
|
+
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解しましょう (ダウンロードした サンプルコード 使用)
|
550
546
|
|
551
547
|
詳細は、**参考サイトのリンク** をご覧ください
|
552
548
|
|
@@ -560,10 +556,6 @@
|
|
560
556
|
|
561
557
|
|
562
558
|
|
563
|
-
**DB への接続ミス** になる理由です。
|
564
|
-
|
565
|
-
|
566
|
-
|
567
559
|
子クラスのメソッド名 (cofigure) が親クラスのメソッド名 (co**n**figure) と違うために
|
568
560
|
|
569
561
|
**オーバライド**ができず、**データベースへの接続設定** が**未定義** のためです。
|
12
サンプルコードの使用
test
CHANGED
@@ -122,11 +122,11 @@
|
|
122
122
|
|
123
123
|
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
124
124
|
|
125
|
-
- ログインする仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
125
|
+
- ログインする 仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
126
|
-
|
127
|
-
|
128
|
-
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
-
- 対策 **下記** NetBeans ブレークポイント Session
|
129
|
+
- デバッグ対策 **下記** NetBeans ブレークポイント Session 49 参照
|
130
130
|
|
131
131
|
|
132
132
|
|
@@ -168,29 +168,29 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
NetBeans **ブレークポイント** (3ヶ所設定) と **処理順序**
|
171
|
+
NetBeans **ブレークポイント** (3ヶ所設定 *) と **処理順序**
|
172
|
-
|
172
|
+
|
173
|
-
|
|
173
|
+
|PHP|行|内容|次のアクション|
|
174
174
|
|
175
175
|
|:--|--:|:--|:--|
|
176
176
|
|
177
|
-
|Application
|
177
|
+
|Application|*184|$controller("status"), $action("index")|続行 (F5)|
|
178
|
-
|
178
|
+
|
179
|
-
|Session
|
179
|
+
|Session|*103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
180
|
-
|
180
|
+
|
181
|
-
|Session
|
181
|
+
|Session|49|$default true に変更 (**上記** 仕様)|続行 (F5)|
|
182
|
-
|
182
|
+
|
183
|
-
|DbRepository
|
183
|
+
|DbRepository|*41|$this->con false に変更|続行 (F5)|
|
184
|
-
|
185
|
-
|
186
|
-
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
-
**注 Session
|
187
|
+
**注 Session 49 は、ブレークポイントではありません**
|
188
188
|
|
189
189
|
|
190
190
|
|
191
191
|
デバッグを実行すると、最後に **エラーが再現** されます
|
192
192
|
|
193
|
-
|
193
|
+
正しい **データベースへの接続設定 (PDO インスタンス)** $this->con を壊しています
|
194
194
|
|
195
195
|
|
196
196
|
|
@@ -392,7 +392,7 @@
|
|
392
392
|
|
393
393
|
28
|
394
394
|
|
395
|
-
29 $con = new PDO(
|
395
|
+
29 $con = new PDO( /* "new PDO" を検索 */
|
396
396
|
|
397
397
|
30 $params['dsn'],
|
398
398
|
|
@@ -496,7 +496,7 @@
|
|
496
496
|
|
497
497
|
MiniBlogApplication.php に**エラーが無い場合**
|
498
498
|
|
499
|
-
DbManager.php と Application.php のコード提示してもらう予定
|
499
|
+
DbManager.php と Application.php のコード提示してもらう予定
|
500
500
|
|
501
501
|
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
502
502
|
|
@@ -530,6 +530,28 @@
|
|
530
530
|
|
531
531
|
|
532
532
|
|
533
|
+
|
534
|
+
|
535
|
+
エラーを解決しても、次の不具合が出ます
|
536
|
+
|
537
|
+
ホームページのデータ件数は、ゼロです
|
538
|
+
|
539
|
+
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
540
|
+
|
541
|
+
|
542
|
+
|
543
|
+
写経のエラーを解決しても、フレームワークの内部とオブジェクト指向は理解できません
|
544
|
+
|
545
|
+
**ダウンロードした サンプルコード** に変更します
|
546
|
+
|
547
|
+
|
548
|
+
|
549
|
+
##### NetBeans IDE デバッグ機能 使って「フレームワークの内部」と「オブジェクト指向」を理解します
|
550
|
+
|
551
|
+
詳細は、**参考サイトのリンク** をご覧ください
|
552
|
+
|
553
|
+
|
554
|
+
|
533
555
|
---
|
534
556
|
|
535
557
|
|
11
微調整
test
CHANGED
@@ -194,7 +194,7 @@
|
|
194
194
|
|
195
195
|
|
196
196
|
|
197
|
-
原因は、**DB への接続ミス**です
|
197
|
+
エラーの原因は、**DB への接続ミス**です
|
198
198
|
|
199
199
|
|
200
200
|
|
10
微調整
test
CHANGED
@@ -168,19 +168,19 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
NetBeans **ブレークポイント** (3ヶ所設定
|
171
|
+
NetBeans **ブレークポイント** (3ヶ所設定) と **処理順序**
|
172
172
|
|
173
173
|
|ファイル |行No|内容|次のアクション|
|
174
174
|
|
175
175
|
|:--|--:|:--|:--|
|
176
176
|
|
177
|
-
|Application.php|
|
177
|
+
|Application.php|184|$controller("status"), $action("index")|続行 (F5)|
|
178
|
-
|
178
|
+
|
179
|
-
|Session.php|
|
179
|
+
|Session.php|103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
180
180
|
|
181
181
|
|Session.php|49|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
182
182
|
|
183
|
-
|DbRepository.php|
|
183
|
+
|DbRepository.php|41|$this->con false に変更|続行 (F5)|
|
184
184
|
|
185
185
|
|
186
186
|
|
9
微調整
test
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
|
109
109
|
仕様 (ホームページ表示とログイン)
|
110
110
|
|
111
|
-
- サンプルコード 仕様
|
111
|
+
- サンプルコード の仕様
|
112
112
|
|
113
113
|
- ホームページは、**ログイン後**に表示されます
|
114
114
|
|
@@ -116,13 +116,13 @@
|
|
116
116
|
|
117
117
|
|
118
118
|
|
119
|
-
- orangefarmer さん 仕様
|
119
|
+
- orangefarmer さん の仕様
|
120
|
-
|
120
|
+
|
121
|
-
- **未ログイン**で、ホームページ表示が実行されます (今回はエラー)
|
121
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回は **DB への接続ミス** のエラー)
|
122
|
-
|
122
|
+
|
123
|
-
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**)
|
123
|
+
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) 本来は、NULLの部分に ログインユーザ ($user['id']) の値がセットされます
|
124
|
-
|
124
|
+
|
125
|
-
- ログインする仕様
|
125
|
+
- ログインする仕様の場合、ホームページ表示前に userテーブル使用で **DB への接続ミス** が発生します
|
126
126
|
|
127
127
|
|
128
128
|
|
@@ -168,19 +168,19 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
NetBeans **ブレークポイント** (3ヶ所設定) と **処理順序**
|
171
|
+
NetBeans **ブレークポイント** (3ヶ所設定 *) と **処理順序**
|
172
172
|
|
173
173
|
|ファイル |行No|内容|次のアクション|
|
174
174
|
|
175
175
|
|:--|--:|:--|:--|
|
176
176
|
|
177
|
-
|Application.php|184|$controller("status"), $action("index")|続行 (F5)|
|
177
|
+
|Application.php|*184|$controller("status"), $action("index")|続行 (F5)|
|
178
|
-
|
178
|
+
|
179
|
-
|Session.php|103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
179
|
+
|Session.php|*103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
180
180
|
|
181
181
|
|Session.php|49|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
182
182
|
|
183
|
-
|DbRepository.php|41|$this->con false に変更|続行 (F5)|
|
183
|
+
|DbRepository.php|*41|$this->con false に変更|続行 (F5)|
|
184
184
|
|
185
185
|
|
186
186
|
|
@@ -190,6 +190,10 @@
|
|
190
190
|
|
191
191
|
デバッグを実行すると、最後に **エラーが再現** されます
|
192
192
|
|
193
|
+
(正しい **データベースへの接続設定 (PDO インスタンス)** $this->con を壊しています)
|
194
|
+
|
195
|
+
|
196
|
+
|
193
197
|
原因は、**DB への接続ミス**です
|
194
198
|
|
195
199
|
|
@@ -224,7 +228,7 @@
|
|
224
228
|
|
225
229
|
183
|
226
230
|
|
227
|
-
184 $this->runAction($controller, $action, $params);
|
231
|
+
184 $this->runAction($controller, $action, $params); /* ブレークポイント */
|
228
232
|
|
229
233
|
185 } catch (HttpNotFoundException $e) {
|
230
234
|
|
@@ -266,7 +270,7 @@
|
|
266
270
|
|
267
271
|
48
|
268
272
|
|
269
|
-
49 return $default;
|
273
|
+
49 return $default; /* $default true に変更 */
|
270
274
|
|
271
275
|
50 }
|
272
276
|
|
@@ -276,7 +280,7 @@
|
|
276
280
|
|
277
281
|
102 {
|
278
282
|
|
279
|
-
103 return $this->get('_authenticated', false);
|
283
|
+
103 return $this->get('_authenticated', false); /* ブレークポイント */
|
280
284
|
|
281
285
|
104 }
|
282
286
|
|
@@ -298,7 +302,7 @@
|
|
298
302
|
|
299
303
|
40 {
|
300
304
|
|
301
|
-
41 $stmt = $this->con->prepare($sql);
|
305
|
+
41 $stmt = $this->con->prepare($sql); /* ブレークポイント $this->con false に変更 */
|
302
306
|
|
303
307
|
42 $stmt->execute($params);
|
304
308
|
|
@@ -494,7 +498,7 @@
|
|
494
498
|
|
495
499
|
DbManager.php と Application.php のコード提示してもらう予定です
|
496
500
|
|
497
|
-
(必要無くなった)
|
501
|
+
(MiniBlogApplication.php にエラーがあったので、必要無くなった)
|
498
502
|
|
499
503
|
|
500
504
|
|
8
調整
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
###回答
|
1
|
+
###『回答』『参考サイトの紹介』『NetBeans デバッグ方法』
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -30,12 +30,6 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
直接の回答ではありません。
|
34
|
-
|
35
|
-
(nullbotさんの好意を無駄にしたくないので...)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
33
|
[パーフェクトPHP デバッグ (処理の流れ | ユーザ登録機能作成)](http://beginner001.html.xdomain.jp/debug-02-1.html)
|
40
34
|
|
41
35
|
[パーフェクトPHP デバッグ (チェックポイント)](http://beginner001.html.xdomain.jp/debug-01.html)
|
@@ -62,30 +56,36 @@
|
|
62
56
|
|
63
57
|
|
64
58
|
|
59
|
+
|
60
|
+
|
61
|
+
**【パーフェクトPHP デバッグ 動作環境】**
|
62
|
+
|
63
|
+
・XAMPP 5.6.31
|
64
|
+
|
65
|
+
・NetBeans 8.2
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
**学習環境**なので XAMPP 7.x.x (PHP 7.x.x) にする必要はありません。
|
70
|
+
|
71
|
+
XAMPP 7.x.x でも動作しますが、Xdebug の準備が必要です。
|
72
|
+
|
73
|
+
[XAMPP 7.1.14 と NetBeans IDE 8.2 の不具合](http://beginner001.html.xdomain.jp/debug-03.html#PHP7)
|
74
|
+
|
75
|
+
|
76
|
+
|
65
|
-
サンプルコード
|
77
|
+
サンプルコードは、フレームワークの **使い方** ではなく、
|
66
|
-
|
78
|
+
|
67
|
-
|
79
|
+
フレームワークとオブジェクト指向の **考え方** について書かれているので
|
68
|
-
|
69
|
-
|
70
|
-
|
80
|
+
|
71
|
-
|
81
|
+
**バージョンは、関係ありません。**
|
72
|
-
|
73
|
-
[差分ツール (WinMerge)](https://winmerge.org/?lang=ja) で
|
74
|
-
|
75
|
-
「フォルダ単位に」すべてのソースの違いを一括で調べることもできます。
|
76
|
-
|
77
|
-
(あくまで、「写経」の入力ミス チェックです)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
最初は大変ですが、頑張ってください。
|
82
|
-
|
83
|
-
期待しています。
|
84
82
|
|
85
83
|
|
86
84
|
|
87
85
|
---
|
88
86
|
|
87
|
+
|
88
|
+
|
89
89
|
####NetBeans デバッグ方法
|
90
90
|
|
91
91
|
|
@@ -94,7 +94,7 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
**NetBeans IDE デバッグ機能** を使った
|
97
|
+
**NetBeans IDE デバッグ機能** を使った デバッグ方法 です。
|
98
98
|
|
99
99
|
|
100
100
|
|
@@ -108,11 +108,25 @@
|
|
108
108
|
|
109
109
|
仕様 (ホームページ表示とログイン)
|
110
110
|
|
111
|
+
- サンプルコード 仕様
|
112
|
+
|
113
|
+
- ホームページは、**ログイン後**に表示されます
|
114
|
+
|
111
|
-
|
115
|
+
- ホームページ (#5 Application->runAction('**status**', '**index**', Array))
|
116
|
+
|
117
|
+
|
118
|
+
|
112
|
-
|
119
|
+
- orangefarmer さん 仕様
|
120
|
+
|
121
|
+
- **未ログイン**で、ホームページ表示が実行されます (今回はエラー)
|
122
|
+
|
113
|
-
|
123
|
+
- #2 StatusRepository->fetchAllPersonalArchivesByUserId(**NULL**) (本来は $user['id'] の値がセットされます)
|
124
|
+
|
114
|
-
|
125
|
+
- ログインする仕様だと、表示前に userテーブル使用で **DB への接続ミス** が発生します
|
126
|
+
|
127
|
+
|
128
|
+
|
115
|
-
|
129
|
+
- 対策 **下記** NetBeans ブレークポイント Session.php 49 参照
|
116
130
|
|
117
131
|
|
118
132
|
|
@@ -174,9 +188,9 @@
|
|
174
188
|
|
175
189
|
|
176
190
|
|
177
|
-
実行後
|
191
|
+
デバッグを実行すると、最後に **エラーが再現** されます
|
178
|
-
|
192
|
+
|
179
|
-
原因は、**DB への接続ミス**
|
193
|
+
原因は、**DB への接続ミス**です
|
180
194
|
|
181
195
|
|
182
196
|
|
@@ -478,7 +492,9 @@
|
|
478
492
|
|
479
493
|
MiniBlogApplication.php に**エラーが無い場合**
|
480
494
|
|
481
|
-
DbManager.php と Application.php のコード提示してもらう予定
|
495
|
+
DbManager.php と Application.php のコード提示してもらう予定です
|
496
|
+
|
497
|
+
(必要無くなった)
|
482
498
|
|
483
499
|
|
484
500
|
|
@@ -522,6 +538,12 @@
|
|
522
538
|
|
523
539
|
|
524
540
|
|
541
|
+
子クラスのメソッド名 (cofigure) が親クラスのメソッド名 (co**n**figure) と違うために
|
542
|
+
|
543
|
+
**オーバライド**ができず、**データベースへの接続設定** が**未定義** のためです。
|
544
|
+
|
545
|
+
|
546
|
+
|
525
547
|
`class MiniBlogApplication extends Application` ← **extends** (継承)
|
526
548
|
|
527
549
|
`{`
|
7
微調整
test
CHANGED
@@ -56,9 +56,9 @@
|
|
56
56
|
|
57
57
|
パーフェクトPHP をデバッグしました (学習方法) や
|
58
58
|
|
59
|
-
パーフェクトPHP をデバッグしました (やる気のある初心者)
|
59
|
+
パーフェクトPHP をデバッグしました (やる気のある初心者) に
|
60
|
-
|
60
|
+
|
61
|
-
|
61
|
+
書いてありますが、**「写経」はおすすめしません。**
|
62
62
|
|
63
63
|
|
64
64
|
|
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
- サンプルコード: ホームページ(#5 Application->runAction('status', 'index', Array))は、ログイン後に表示されます
|
112
112
|
|
113
|
-
- orangefarmer さん: 未ログイン(#2 StatusRepository->fetchAllPersonalArchivesByUserId(NULL))で実行され
|
113
|
+
- orangefarmer さん: 未ログイン(#2 StatusRepository->fetchAllPersonalArchivesByUserId(NULL))で、ホームページ表示が実行されます
|
114
114
|
|
115
115
|
- 対策 **下記** NetBeans ブレークポイント Session.php 49 参照
|
116
116
|
|
@@ -154,19 +154,19 @@
|
|
154
154
|
|
155
155
|
|
156
156
|
|
157
|
-
NetBeans ブレークポイント (
|
157
|
+
NetBeans **ブレークポイント** (3ヶ所設定) と **処理順序**
|
158
|
-
|
158
|
+
|
159
|
-
|ファイル |行
|
159
|
+
|ファイル |行No|内容|次のアクション|
|
160
160
|
|
161
161
|
|:--|--:|:--|:--|
|
162
162
|
|
163
|
-
|Application.php|184|$controller("status"), $action("index")
|
163
|
+
|Application.php|184|$controller("status"), $action("index")|続行 (F5)|
|
164
164
|
|
165
165
|
|Session.php|103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
166
166
|
|
167
167
|
|Session.php|49|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
168
168
|
|
169
|
-
|DbRepository.php|41|$this->con false に変更
|
169
|
+
|DbRepository.php|41|$this->con false に変更|続行 (F5)|
|
170
170
|
|
171
171
|
|
172
172
|
|
@@ -534,40 +534,50 @@
|
|
534
534
|
|
535
535
|
|
536
536
|
|
537
|
-
MiniBlogApplication のメソッド
|
537
|
+
MiniBlogApplication の cofigure メソッド
|
538
538
|
|
539
539
|
` protected function cofigure()` ← **オーバライドできない** (co**n**figure でないため)
|
540
540
|
|
541
|
+
` {` ↓ 以下 **データベースへの接続設定**
|
542
|
+
|
543
|
+
` $this->db_manager->connect('master', array(`
|
544
|
+
|
545
|
+
` 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',`
|
546
|
+
|
547
|
+
` 'user' => 'root',`
|
548
|
+
|
549
|
+
` 'password' => '',`
|
550
|
+
|
551
|
+
` ));`
|
552
|
+
|
553
|
+
` }`
|
554
|
+
|
555
|
+
|
556
|
+
|
557
|
+
|
558
|
+
|
559
|
+
Application の **空** の co**n**figure メソッド
|
560
|
+
|
561
|
+
` protected function configure()` ← co**n**figure
|
562
|
+
|
541
563
|
` {`
|
542
564
|
|
543
|
-
` ... データベースへの接続設定`
|
544
|
-
|
545
565
|
` }`
|
546
566
|
|
547
567
|
|
548
568
|
|
549
569
|
|
550
570
|
|
551
|
-
Application の
|
571
|
+
Application のコンストラクタ
|
552
|
-
|
572
|
+
|
553
|
-
` p
|
573
|
+
` public function __construct($debug = false)`
|
554
574
|
|
555
575
|
` {`
|
556
576
|
|
577
|
+
` $this->setDebugMode($debug);`
|
578
|
+
|
579
|
+
` $this->initialize();`
|
580
|
+
|
581
|
+
` $this->configure();` ← **空** のメソッド co**n**figure (データベースへの接続設定 が **未定義**)
|
582
|
+
|
557
583
|
` }`
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
Application のコンストラクタ
|
564
|
-
|
565
|
-
` public function __construct($debug = false)`
|
566
|
-
|
567
|
-
` {`
|
568
|
-
|
569
|
-
` ... 省略`
|
570
|
-
|
571
|
-
` $this->configure();` ← **空**のメソッド co**n**figure (データベースへの接続設定 が**未定義**)
|
572
|
-
|
573
|
-
` }`
|
6
微調整
test
CHANGED
@@ -154,9 +154,9 @@
|
|
154
154
|
|
155
155
|
|
156
156
|
|
157
|
-
NetBeans ブレークポイント (**3ヶ所**設定)
|
157
|
+
NetBeans ブレークポイント (**3ヶ所**設定) と 処理順序
|
158
|
-
|
158
|
+
|
159
|
-
|ファイル|行|内容|次のアクション|
|
159
|
+
|ファイル |行番号|内容|次のアクション|
|
160
160
|
|
161
161
|
|:--|--:|:--|:--|
|
162
162
|
|
@@ -468,7 +468,7 @@
|
|
468
468
|
|
469
469
|
|
470
470
|
|
471
|
-
**上記 3ファイル の
|
471
|
+
**上記 3ファイル の メソッド を調べる**
|
472
472
|
|
473
473
|
上記 3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
474
474
|
|
5
エラーの理由 追加
test
CHANGED
@@ -36,21 +36,27 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
ter
|
39
|
+
[パーフェクトPHP デバッグ (処理の流れ | ユーザ登録機能作成)](http://beginner001.html.xdomain.jp/debug-02-1.html)
|
40
|
-
|
40
|
+
|
41
|
-
[パーフェクト
|
41
|
+
[パーフェクトPHP デバッグ (チェックポイント)](http://beginner001.html.xdomain.jp/debug-01.html)
|
42
|
-
|
42
|
+
|
43
|
-
|
43
|
+
[パーフェクトPHP デバッグ (その他)](http://beginner001.html.xdomain.jp/debug-03.html) (具体的な 環境設定手順)
|
44
|
+
|
45
|
+
[パーフェクトPHP デバッグ (**NetBeans デバッグ方法**)](http://beginner001.html.xdomain.jp/debug-04.html) (具体的な デバッグ例)
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
[パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
50
|
+
|
51
|
+
[パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
44
52
|
|
45
53
|
|
46
54
|
|
47
55
|
上記リンクの
|
48
56
|
|
49
|
-
|
57
|
+
パーフェクトPHP をデバッグしました (学習方法) や
|
50
|
-
|
58
|
+
|
51
|
-
|
59
|
+
パーフェクトPHP をデバッグしました (やる気のある初心者)
|
52
|
-
|
53
|
-
[NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html)
|
54
60
|
|
55
61
|
に書いてありますが、**「写経」はおすすめしません。**
|
56
62
|
|
@@ -62,8 +68,6 @@
|
|
62
68
|
|
63
69
|
|
64
70
|
|
65
|
-
|
66
|
-
|
67
71
|
あまり良い方法ではありませんが、
|
68
72
|
|
69
73
|
[差分ツール (WinMerge)](https://winmerge.org/?lang=ja) で
|
@@ -86,7 +90,7 @@
|
|
86
90
|
|
87
91
|
|
88
92
|
|
89
|
-
**【エラー原因】**
|
93
|
+
**【エラーの原因】**
|
90
94
|
|
91
95
|
|
92
96
|
|
@@ -108,7 +112,7 @@
|
|
108
112
|
|
109
113
|
- orangefarmer さん: 未ログイン(#2 StatusRepository->fetchAllPersonalArchivesByUserId(NULL))で実行されています
|
110
114
|
|
111
|
-
- 対策 **下記** NetBeans ブレークポイント
|
115
|
+
- 対策 **下記** NetBeans ブレークポイント Session.php 49 参照
|
112
116
|
|
113
117
|
|
114
118
|
|
@@ -150,29 +154,29 @@
|
|
150
154
|
|
151
155
|
|
152
156
|
|
153
|
-
NetBeans ブレークポイント (3ヶ所設定)
|
157
|
+
NetBeans ブレークポイント (**3ヶ所**設定)
|
154
158
|
|
155
159
|
|ファイル|行|内容|次のアクション|
|
156
160
|
|
157
|
-
|:--|
|
161
|
+
|:--|--:|:--|:--|
|
158
162
|
|
159
163
|
|Application.php|184|$controller("status"), $action("index") 確認|続行 (F5)|
|
160
164
|
|
161
165
|
|Session.php|103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
162
166
|
|
163
|
-
|
|
167
|
+
|Session.php|49|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
164
168
|
|
165
169
|
|DbRepository.php|41|$this->con false に変更 (PDO インスタンス 以外)|続行 (F5)|
|
166
170
|
|
167
171
|
|
168
172
|
|
169
|
-
**
|
173
|
+
**注 Session.php 49 は、ブレークポイントではありません**
|
170
|
-
|
171
|
-
|
172
|
-
|
174
|
+
|
175
|
+
|
176
|
+
|
173
|
-
実行後、**エラーが再現**
|
177
|
+
実行後、**エラーが再現**
|
174
|
-
|
178
|
+
|
175
|
-
原因は、**DB への接続ミス**
|
179
|
+
原因は、**DB への接続ミス**
|
176
180
|
|
177
181
|
|
178
182
|
|
@@ -464,7 +468,7 @@
|
|
464
468
|
|
465
469
|
|
466
470
|
|
467
|
-
**上記 3ファイル の関連個所 (メソッド
|
471
|
+
**上記 3ファイル の関連個所 (メソッド)を調べる**
|
468
472
|
|
469
473
|
上記 3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
470
474
|
|
@@ -503,3 +507,67 @@
|
|
503
507
|
正 protected function co**n**figure()
|
504
508
|
|
505
509
|
誤 protected function cofigure()
|
510
|
+
|
511
|
+
|
512
|
+
|
513
|
+
---
|
514
|
+
|
515
|
+
|
516
|
+
|
517
|
+
【エラーの理由】
|
518
|
+
|
519
|
+
|
520
|
+
|
521
|
+
**DB への接続ミス** になる理由です。
|
522
|
+
|
523
|
+
|
524
|
+
|
525
|
+
`class MiniBlogApplication extends Application` ← **extends** (継承)
|
526
|
+
|
527
|
+
`{`
|
528
|
+
|
529
|
+
` ... 省略`
|
530
|
+
|
531
|
+
`}`
|
532
|
+
|
533
|
+
|
534
|
+
|
535
|
+
|
536
|
+
|
537
|
+
MiniBlogApplication のメソッド
|
538
|
+
|
539
|
+
` protected function cofigure()` ← **オーバライドできない** (co**n**figure でないため)
|
540
|
+
|
541
|
+
` {`
|
542
|
+
|
543
|
+
` ... データベースへの接続設定`
|
544
|
+
|
545
|
+
` }`
|
546
|
+
|
547
|
+
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
Application の**空**のメソッド
|
552
|
+
|
553
|
+
` protected function configure()` ← co**n**figure
|
554
|
+
|
555
|
+
` {`
|
556
|
+
|
557
|
+
` }`
|
558
|
+
|
559
|
+
|
560
|
+
|
561
|
+
|
562
|
+
|
563
|
+
Application のコンストラクタ
|
564
|
+
|
565
|
+
` public function __construct($debug = false)`
|
566
|
+
|
567
|
+
` {`
|
568
|
+
|
569
|
+
` ... 省略`
|
570
|
+
|
571
|
+
` $this->configure();` ← **空**のメソッド co**n**figure (データベースへの接続設定 が**未定義**)
|
572
|
+
|
573
|
+
` }`
|
4
表 整形
test
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
|
109
109
|
- orangefarmer さん: 未ログイン(#2 StatusRepository->fetchAllPersonalArchivesByUserId(NULL))で実行されています
|
110
110
|
|
111
|
-
- 対策 **下記** NetBeans ブレークポイント (Session.php) (49
|
111
|
+
- 対策 **下記** NetBeans ブレークポイント (Session.php) (49) 参照
|
112
112
|
|
113
113
|
|
114
114
|
|
@@ -156,17 +156,17 @@
|
|
156
156
|
|
157
157
|
|:--|:--|:--|:--|
|
158
158
|
|
159
|
-
|Application.php|184
|
159
|
+
|Application.php|184|$controller("status"), $action("index") 確認|続行 (F5)|
|
160
|
-
|
160
|
+
|
161
|
-
|Session.php|103
|
161
|
+
|Session.php|103|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
162
|
-
|
162
|
+
|
163
|
-
|(Session.php)|(49
|
163
|
+
|(Session.php)|(49)|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
164
|
-
|
164
|
+
|
165
|
-
|DbRepository.php|41
|
165
|
+
|DbRepository.php|41|$this->con false に変更 (PDO インスタンス 以外)|続行 (F5)|
|
166
|
-
|
167
|
-
|
168
|
-
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
-
**(Session.php) (49
|
169
|
+
**(Session.php) (49) は、ブレークポイントではありません**
|
170
170
|
|
171
171
|
|
172
172
|
|
3
画像へのコメント表示
test
CHANGED
@@ -496,6 +496,8 @@
|
|
496
496
|
|
497
497
|

|
498
498
|
|
499
|
+
クリックすると、拡大表示します
|
500
|
+
|
499
501
|
|
500
502
|
|
501
503
|
正 protected function co**n**figure()
|
2
NetBeans デバッグ方法 追加
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
###回答 と 参考サイトの紹介 です
|
1
|
+
###回答 と 参考サイトの紹介 と NetBeans デバッグ方法 です
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -18,10 +18,18 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
+
**NetBeans IDE デバッグ機能** を使って解決しました。
|
22
|
+
|
23
|
+
|
24
|
+
|
21
25
|
---
|
22
26
|
|
23
27
|
|
24
28
|
|
29
|
+
参考サイトの紹介です。
|
30
|
+
|
31
|
+
|
32
|
+
|
25
33
|
直接の回答ではありません。
|
26
34
|
|
27
35
|
(nullbotさんの好意を無駄にしたくないので...)
|
@@ -44,7 +52,7 @@
|
|
44
52
|
|
45
53
|
[NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html)
|
46
54
|
|
47
|
-
に書いてありますが、「写経」はおすすめしません。
|
55
|
+
に書いてありますが、**「写経」はおすすめしません。**
|
48
56
|
|
49
57
|
|
50
58
|
|
@@ -69,3 +77,427 @@
|
|
69
77
|
最初は大変ですが、頑張ってください。
|
70
78
|
|
71
79
|
期待しています。
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
---
|
84
|
+
|
85
|
+
####NetBeans デバッグ方法
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
**【エラー原因】**
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
**NetBeans IDE デバッグ機能** を使った 具体的な デバッグ方法 です。
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
注意点
|
98
|
+
|
99
|
+
- 公式サイト サンプルコード(mini-blog.zip) を使用 (不具合 2ヶ所修正)
|
100
|
+
|
101
|
+
- デバッグ中の変数の**変更**は、**メモリ上**です (ファイルは元のまま)
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
仕様 (ホームページ表示とログイン)
|
106
|
+
|
107
|
+
- サンプルコード: ホームページ(#5 Application->runAction('status', 'index', Array))は、ログイン後に表示されます
|
108
|
+
|
109
|
+
- orangefarmer さん: 未ログイン(#2 StatusRepository->fetchAllPersonalArchivesByUserId(NULL))で実行されています
|
110
|
+
|
111
|
+
- 対策 **下記** NetBeans ブレークポイント (Session.php) (49行目) 参照
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
参考
|
116
|
+
|
117
|
+
- [処理の流れ | ホームページと投稿](http://beginner001.html.xdomain.jp/debug-02-2.html)
|
118
|
+
|
119
|
+
- [処理の流れ | アカウント情報管理とログイン](http://beginner001.html.xdomain.jp/debug-02-4.html)
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
エラー ログ
|
126
|
+
|
127
|
+
```
|
128
|
+
|
129
|
+
#6 C:\xampp\htdocs\php-blog.localhost\web\index_dev.php(7): Application->run()
|
130
|
+
|
131
|
+
#5 C:\xampp\htdocs\php-blog.localhost\core\Application.php(103): Application->runAction('status', 'index', Array)
|
132
|
+
|
133
|
+
#4 C:\xampp\htdocs\php-blog.localhost\core\Application.php(123): Controller->run('index', Array)
|
134
|
+
|
135
|
+
#3 C:\xampp\htdocs\php-blog.localhost\core\Controller.php(41): StatusController->indexAction(Array)
|
136
|
+
|
137
|
+
#2 C:\xampp\htdocs\php-blog.localhost\controllers\StatusController.php(8): StatusRepository->fetchAllPersonalArchivesByUserId(NULL)
|
138
|
+
|
139
|
+
#1 C:\xampp\htdocs\php-blog.localhost\models\StatusRepository.php(22): DbRepository->fetchAll('select a.*, u.u...', Array)
|
140
|
+
|
141
|
+
#0 C:\xampp\htdocs\php-blog.localhost\core\DbRepository.php(32): DbRepository->execute('select a.*, u.u...', Array)
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
Fatal error: Call to a member function prepare() on bool
|
146
|
+
|
147
|
+
```
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
NetBeans ブレークポイント (3ヶ所設定)
|
154
|
+
|
155
|
+
|ファイル|行|内容|次のアクション|
|
156
|
+
|
157
|
+
|:--|:--|:--|:--|
|
158
|
+
|
159
|
+
|Application.php|184行目|$controller("status"), $action("index") 確認|続行 (F5)|
|
160
|
+
|
161
|
+
|Session.php|103行目|isAuthenticated ログインチェック|ステップ・イン (F7) 2回|
|
162
|
+
|
163
|
+
|(Session.php)|(49行目)|$default true に変更 (**上記** 仕様 対策)|続行 (F5)|
|
164
|
+
|
165
|
+
|DbRepository.php|41行目|$this->con false に変更 (PDO インスタンス 以外)|続行 (F5)|
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
**(Session.php) (49行目) は、ブレークポイントではありません**
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
実行後、**エラーが再現**されます
|
174
|
+
|
175
|
+
原因は、**DB への接続ミス** です
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
Application.php
|
182
|
+
|
183
|
+
```PHP
|
184
|
+
|
185
|
+
...
|
186
|
+
|
187
|
+
173 public function run()
|
188
|
+
|
189
|
+
174 {
|
190
|
+
|
191
|
+
175 try {
|
192
|
+
|
193
|
+
176 $params = $this->router->resolve($this->request->getPathInfo());
|
194
|
+
|
195
|
+
177 if ($params === false) {
|
196
|
+
|
197
|
+
178 throw new HttpNotFoundException('No route found for ' . $this->request->getPathInfo());
|
198
|
+
|
199
|
+
179 }
|
200
|
+
|
201
|
+
180
|
202
|
+
|
203
|
+
181 $controller = $params['controller'];
|
204
|
+
|
205
|
+
182 $action = $params['action'];
|
206
|
+
|
207
|
+
183
|
208
|
+
|
209
|
+
184 $this->runAction($controller, $action, $params);
|
210
|
+
|
211
|
+
185 } catch (HttpNotFoundException $e) {
|
212
|
+
|
213
|
+
186 $this->render404Page($e);
|
214
|
+
|
215
|
+
187 } catch (UnauthorizedActionException $e) {
|
216
|
+
|
217
|
+
188 list($controller, $action) = $this->login_action;
|
218
|
+
|
219
|
+
189 $this->runAction($controller, $action);
|
220
|
+
|
221
|
+
190 }
|
222
|
+
|
223
|
+
191
|
224
|
+
|
225
|
+
...
|
226
|
+
|
227
|
+
```
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
Session.php
|
234
|
+
|
235
|
+
```PHP
|
236
|
+
|
237
|
+
...
|
238
|
+
|
239
|
+
43 public function get($name, $default = null)
|
240
|
+
|
241
|
+
44 {
|
242
|
+
|
243
|
+
45 if (isset($_SESSION[$name])) {
|
244
|
+
|
245
|
+
46 return $_SESSION[$name];
|
246
|
+
|
247
|
+
47 }
|
248
|
+
|
249
|
+
48
|
250
|
+
|
251
|
+
49 return $default;
|
252
|
+
|
253
|
+
50 }
|
254
|
+
|
255
|
+
...
|
256
|
+
|
257
|
+
101 public function isAuthenticated()
|
258
|
+
|
259
|
+
102 {
|
260
|
+
|
261
|
+
103 return $this->get('_authenticated', false);
|
262
|
+
|
263
|
+
104 }
|
264
|
+
|
265
|
+
...
|
266
|
+
|
267
|
+
```
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
DbRepository.php
|
274
|
+
|
275
|
+
```PHP
|
276
|
+
|
277
|
+
...
|
278
|
+
|
279
|
+
39 public function execute($sql, $params = array())
|
280
|
+
|
281
|
+
40 {
|
282
|
+
|
283
|
+
41 $stmt = $this->con->prepare($sql);
|
284
|
+
|
285
|
+
42 $stmt->execute($params);
|
286
|
+
|
287
|
+
43
|
288
|
+
|
289
|
+
44 return $stmt;
|
290
|
+
|
291
|
+
45 }
|
292
|
+
|
293
|
+
...
|
294
|
+
|
295
|
+
```
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
---
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
**【ソースコードを調べる】**
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
"**new PDO**" を検索 検索ツール(Devas)
|
308
|
+
|
309
|
+
|ファイル|メソッド|
|
310
|
+
|
311
|
+
|:--|:--|
|
312
|
+
|
313
|
+
|DbManager.php |public function **connect(**$name, $params)|
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
"**connect(**" を検索 検索ツール(Devas)
|
320
|
+
|
321
|
+
|ファイル|メソッド|
|
322
|
+
|
323
|
+
|:--|:--|
|
324
|
+
|
325
|
+
|MiniBlogApplication.php|protected function **configure(**)|
|
326
|
+
|
327
|
+
|~~DbManager.php~~|~~public function connect($name, $params)~~ 同上|
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
"**configure(**" を検索 検索ツール(Devas)
|
334
|
+
|
335
|
+
|ファイル|メソッド|
|
336
|
+
|
337
|
+
|:--|:--|
|
338
|
+
|
339
|
+
|~~MiniBlogApplication.php~~|~~protected function configure()~~ 同上|
|
340
|
+
|
341
|
+
|Application.php|public function __construct($debug = false)|
|
342
|
+
|
343
|
+
|Application.php|protected function configure()|
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
DbManager.php
|
350
|
+
|
351
|
+
```PHP
|
352
|
+
|
353
|
+
...
|
354
|
+
|
355
|
+
20 public function connect($name, $params)
|
356
|
+
|
357
|
+
21 {
|
358
|
+
|
359
|
+
22 $params = array_merge(array(
|
360
|
+
|
361
|
+
23 'dsn' => null,
|
362
|
+
|
363
|
+
24 'user' => '',
|
364
|
+
|
365
|
+
25 'password' => '',
|
366
|
+
|
367
|
+
26 'options' => array(),
|
368
|
+
|
369
|
+
27 ), $params);
|
370
|
+
|
371
|
+
28
|
372
|
+
|
373
|
+
29 $con = new PDO(
|
374
|
+
|
375
|
+
30 $params['dsn'],
|
376
|
+
|
377
|
+
31 $params['user'],
|
378
|
+
|
379
|
+
32 $params['password'],
|
380
|
+
|
381
|
+
33 $params['options']
|
382
|
+
|
383
|
+
34 );
|
384
|
+
|
385
|
+
35
|
386
|
+
|
387
|
+
36 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
388
|
+
|
389
|
+
37
|
390
|
+
|
391
|
+
38 $this->connections[$name] = $con;
|
392
|
+
|
393
|
+
39 }
|
394
|
+
|
395
|
+
...
|
396
|
+
|
397
|
+
```
|
398
|
+
|
399
|
+
|
400
|
+
|
401
|
+
|
402
|
+
|
403
|
+
MiniBlogApplication.php
|
404
|
+
|
405
|
+
```PHP
|
406
|
+
|
407
|
+
...
|
408
|
+
|
409
|
+
37 protected function configure()
|
410
|
+
|
411
|
+
38 {
|
412
|
+
|
413
|
+
39 $this->db_manager->connect('master', array(
|
414
|
+
|
415
|
+
40 'dsn' => 'mysql:dbname=mini_blog;host=localhost;charset=utf8',
|
416
|
+
|
417
|
+
41 'user' => 'root',
|
418
|
+
|
419
|
+
42 'password' => '',
|
420
|
+
|
421
|
+
43 ));
|
422
|
+
|
423
|
+
44 }
|
424
|
+
|
425
|
+
...
|
426
|
+
|
427
|
+
```
|
428
|
+
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
Application.php
|
434
|
+
|
435
|
+
```PHP
|
436
|
+
|
437
|
+
...
|
438
|
+
|
439
|
+
21 public function __construct($debug = false)
|
440
|
+
|
441
|
+
22 {
|
442
|
+
|
443
|
+
23 $this->setDebugMode($debug);
|
444
|
+
|
445
|
+
24 $this->initialize();
|
446
|
+
|
447
|
+
25 $this->configure();
|
448
|
+
|
449
|
+
26 }
|
450
|
+
|
451
|
+
...
|
452
|
+
|
453
|
+
60 protected function configure()
|
454
|
+
|
455
|
+
61 {
|
456
|
+
|
457
|
+
62 }
|
458
|
+
|
459
|
+
...
|
460
|
+
|
461
|
+
```
|
462
|
+
|
463
|
+
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
**上記 3ファイル の関連個所 (メソッド等)を調べる**
|
468
|
+
|
469
|
+
上記 3ファイルのうち、orangefarmer さんから コード提示されているのは、
|
470
|
+
|
471
|
+
MiniBlogApplication.php のみ
|
472
|
+
|
473
|
+
|
474
|
+
|
475
|
+
MiniBlogApplication.php に**エラーが無い場合**
|
476
|
+
|
477
|
+
DbManager.php と Application.php のコード提示してもらう予定
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
---
|
482
|
+
|
483
|
+
|
484
|
+
|
485
|
+
**【修正箇所が分かる】**
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
差分ツール (WinMerge) で
|
490
|
+
|
491
|
+
サンプルコード の MiniBlogApplication.php と orangefarmer さんの MiniBlogApplication.php を比較する
|
492
|
+
|
493
|
+
|
494
|
+
|
495
|
+
|
496
|
+
|
497
|
+

|
498
|
+
|
499
|
+
|
500
|
+
|
501
|
+
正 protected function co**n**figure()
|
502
|
+
|
503
|
+
誤 protected function cofigure()
|
1
回答 追加
test
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
-
###参考サイトの紹介です
|
1
|
+
###回答 と 参考サイトの紹介 です
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
回答です。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
PhpBlogApplication.php (MiniBlogApplication.php)
|
10
|
+
|
11
|
+
誤 protected function cofigure()
|
12
|
+
|
13
|
+
正 protected function co**n**figure()
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
既に、指摘されていますが、**DB への接続ミス**です。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
---
|
2
22
|
|
3
23
|
|
4
24
|
|
@@ -12,17 +32,19 @@
|
|
12
32
|
|
13
33
|
[パーフェクトphpの7章の例題の変数の中身が知りたい。](https://teratail.com/questions/185638) の
|
14
34
|
|
15
|
-
「参考サイトの紹介です」の**各リンク**
|
35
|
+
「参考サイトの紹介です」の**各リンク**もご覧ください。
|
16
36
|
|
17
37
|
|
18
38
|
|
19
39
|
上記リンクの
|
20
40
|
|
21
|
-
[パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
41
|
+
[パーフェクトPHP をデバッグしました (学習方法)](https://beginner001.hatenablog.com/entry/2018/12/27/100003)
|
22
42
|
|
23
|
-
[パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
43
|
+
[パーフェクトPHP をデバッグしました (やる気のある初心者)](https://beginner001.hatenablog.com/entry/2018/12/27/100004)
|
24
44
|
|
45
|
+
[NetBeans IDE のおかげで理解が飛躍的に](https://blogs.yahoo.co.jp/amegrapsp/41551211.html)
|
46
|
+
|
25
|
-
書いてありますが、「写経」はおすすめしません。
|
47
|
+
に書いてありますが、「写経」はおすすめしません。
|
26
48
|
|
27
49
|
|
28
50
|
|