teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

回答の順序を整理しました。

2020/01/12 00:05

投稿

pechochan
pechochan

スコア15

answer CHANGED
@@ -1,144 +1,25 @@
1
- ### 「Slim、TWI」に関係するドキュメント追加
1
+ ### PHP学習中です
2
2
 
3
+ 実は、購入した**「Web開発のためのMySQL」**の本にて学習中です。
4
+ PHP、MySQL、フレームワークを昨年の暮れから、年末年始を利用し、
3
- 以下が関係するファイル群
5
+ 学習中でして同じところ躓いていました
4
- ___________________________________________________________
5
- (1)
6
- my_slim_app/app/middleware.php の中身
7
6
 
8
- ```
9
- <?php
10
- declare(strict_types=1);
7
+ そこで、3時間前にたまたま「TwigMiddleware」で検索して、この「質問」にぶち当たり、
8
+ 「Eggpanさん」の回答をヒントに、先ほど(昨晩)1時間あまりで、動き出しました。
11
9
 
12
- use DI\Container;
13
- use Slim\Factory\AppFactory;
14
- use Slim\Views\Twig;
15
- use Slim\Views\TwigMiddleware;
10
+ まっさらな状態から、フォルダー作成(my_slim)インストール(composer)して、
11
+ 動き出しています。
16
12
 
17
- return function ($app) {
18
-
19
- // Create Container
13
+ それが、先ほどの回答ですが、何か、環境が違うとだめかもしれませんね!
20
- $container = new Container();
21
14
 
22
- // create App
23
- AppFactory::setContainer($container);
24
- $app = AppFactory::create();
25
-
26
- // Set view in Container
27
- $container->set('view', function() {
28
- return Twig::create('../templates', ['cache' => '../templates/cache']);
29
- });
30
-
31
- // Add Twig-View Middleware
32
- $app->add(TwigMiddleware::createFromContainer($app));
33
-
34
- };
15
+ -
35
- ```
36
16
  ___________________________________________________________
17
+ -
37
- (2)
18
+ その前の回答は、
19
+ -
38
- my_slim_app/app/routes.php 中身
20
+ **もしかして、こ順も、大事! 逆は、だめかも? **
39
-
21
+ -
40
22
  ```
41
- <?php
42
- declare(strict_types=1);
43
-
44
- use App\Application\Actions\User\ListUsersAction;
45
- use App\Application\Actions\User\ViewUserAction;
46
- use Psr\Http\Message\ResponseInterface as Response;
47
- use Psr\Http\Message\ServerRequestInterface as Request;
48
- use Slim\App;
49
- use Slim\Interfaces\RouteCollectorProxyInterface as Group;
50
-
51
- return function ($app) {
52
- $app->get('/', function ($request, $response) {
53
- $response->getBody()->write('Hello 2 world!');
54
- return $response;
55
- });
56
-
57
- $app->get('/{name}', function ($request, $response, $args) {
58
- return $this->get('view')->render($response, 'index.html', [
59
- 'name' => $args['name']
60
- ]);
61
- });
62
-
63
- };
64
- ```
65
- ___________________________________________________________
66
- (3)
67
- my_slim_app/public/index.php の中身
23
+ composer require php-di/php-di
68
-
69
- ```
70
- <?php
71
- declare(strict_types=1);
72
-
73
- use App\Application\Handlers\HttpErrorHandler;
74
- use App\Application\Handlers\ShutdownHandler;
75
- use App\Application\ResponseEmitter\ResponseEmitter;
76
- use DI\ContainerBuilder;
77
- use Slim\Factory\AppFactory;
78
- use Slim\Factory\ServerRequestCreatorFactory;
79
-
80
- require __DIR__ . '/../vendor/autoload.php';
81
-
82
- // Instantiate PHP-DI ContainerBuilder
83
- $containerBuilder = new ContainerBuilder();
84
-
85
- if (false) { // Should be set to true in production
86
- $containerBuilder->enableCompilation(__DIR__ . '/../var/cache');
87
- }
88
-
89
- // Set up settings
90
- $settings = require __DIR__ . '/../app/settings.php';
91
- $settings($containerBuilder);
92
-
93
- // Set up dependencies
94
- $dependencies = require __DIR__ . '/../app/dependencies.php';
95
- $dependencies($containerBuilder);
96
-
97
- // Set up repositories
98
- $repositories = require __DIR__ . '/../app/repositories.php';
99
- $repositories($containerBuilder);
100
-
101
- // Build PHP-DI Container instance
102
- $container = $containerBuilder->build();
24
+ composer require slim/twig-view
103
-
104
- // Instantiate the app
105
- AppFactory::setContainer($container);
106
- $app = AppFactory::create();
107
- $callableResolver = $app->getCallableResolver();
108
-
109
- // Register middleware
110
- $middleware = require __DIR__ . '/../app/middleware.php';
111
- $middleware($app);
112
-
113
- // Register routes
114
- $routes = require __DIR__ . '/../app/routes.php';
115
- $routes($app);
116
-
117
- /** @var bool $displayErrorDetails */
118
- $displayErrorDetails = $container->get('settings')['displayErrorDetails'];
119
-
120
- // Create Request object from globals
121
- $serverRequestCreator = ServerRequestCreatorFactory::create();
122
- $request = $serverRequestCreator->createServerRequestFromGlobals();
123
-
124
- // Create Error Handler
125
- $responseFactory = $app->getResponseFactory();
126
- $errorHandler = new HttpErrorHandler($callableResolver, $responseFactory);
127
-
128
- // Create Shutdown Handler
129
- $shutdownHandler = new ShutdownHandler($request, $errorHandler, $displayErrorDetails);
130
- register_shutdown_function($shutdownHandler);
131
-
132
- // Add Routing Middleware
133
- $app->addRoutingMiddleware();
134
-
135
- // Add Error Middleware
136
- $errorMiddleware = $app->addErrorMiddleware($displayErrorDetails, false, false);
137
- $errorMiddleware->setDefaultErrorHandler($errorHandler);
138
-
139
- // Run App & Emit Response
140
- $response = $app->handle($request);
141
- $responseEmitter = new ResponseEmitter();
142
- $responseEmitter->emit($response);
143
-
144
25
  ```

4

誤字脱字の訂正です。

2020/01/12 00:05

投稿

pechochan
pechochan

スコア15

answer CHANGED
@@ -1,4 +1,4 @@
1
- ### 「Slim、TWI」に関係するドキュメントを追加しました
1
+ ### 「Slim、TWI」に関係するドキュメントを追加。
2
2
 
3
3
  以下が、関係するファイル群です。
4
4
  ___________________________________________________________

3

誤字脱字の訂正です。

2020/01/11 16:13

投稿

pechochan
pechochan

スコア15

answer CHANGED
@@ -1,4 +1,4 @@
1
- ### 「Slim、TWI」関係ドキュメントを追加しました。
1
+ ### 「Slim、TWI」関係するドキュメントを追加しました。
2
2
 
3
3
  以下が、関係するファイル群です。
4
4
  ___________________________________________________________

2

誤字脱字の修正です。

2020/01/11 16:12

投稿

pechochan
pechochan

スコア15

answer CHANGED
@@ -1,6 +1,6 @@
1
- ### 関係のドキュメントを追加しました。
1
+ ### 「Slim、TWI」関係のドキュメントを追加しました。
2
2
 
3
- 以下が、関係ファイル群です。
3
+ 以下が、関係するファイル群です。
4
4
  ___________________________________________________________
5
5
  (1)
6
6
  my_slim_app/app/middleware.php の中身

1

追加しました。

2020/01/11 16:10

投稿

pechochan
pechochan

スコア15

answer CHANGED
@@ -1,8 +1,144 @@
1
- ### 順番変えると、だめかもせん
1
+ ### 関係のドキュメント追加しました
2
2
 
3
- もしかして順も、大事! 逆は、だめかも?
3
+ 以下が関係ファイル群です。
4
+ ___________________________________________________________
5
+ (1)
6
+ my_slim_app/app/middleware.php の中身
4
7
 
5
8
  ```
9
+ <?php
10
+ declare(strict_types=1);
11
+
12
+ use DI\Container;
13
+ use Slim\Factory\AppFactory;
14
+ use Slim\Views\Twig;
15
+ use Slim\Views\TwigMiddleware;
16
+
17
+ return function ($app) {
18
+
19
+ // Create Container
20
+ $container = new Container();
21
+
22
+ // create App
23
+ AppFactory::setContainer($container);
24
+ $app = AppFactory::create();
25
+
26
+ // Set view in Container
27
+ $container->set('view', function() {
28
+ return Twig::create('../templates', ['cache' => '../templates/cache']);
29
+ });
30
+
31
+ // Add Twig-View Middleware
32
+ $app->add(TwigMiddleware::createFromContainer($app));
33
+
34
+ };
35
+ ```
36
+ ___________________________________________________________
37
+ (2)
38
+ my_slim_app/app/routes.php の中身
39
+
40
+ ```
41
+ <?php
42
+ declare(strict_types=1);
43
+
44
+ use App\Application\Actions\User\ListUsersAction;
45
+ use App\Application\Actions\User\ViewUserAction;
46
+ use Psr\Http\Message\ResponseInterface as Response;
47
+ use Psr\Http\Message\ServerRequestInterface as Request;
48
+ use Slim\App;
49
+ use Slim\Interfaces\RouteCollectorProxyInterface as Group;
50
+
51
+ return function ($app) {
52
+ $app->get('/', function ($request, $response) {
53
+ $response->getBody()->write('Hello 2 world!');
54
+ return $response;
55
+ });
56
+
57
+ $app->get('/{name}', function ($request, $response, $args) {
58
+ return $this->get('view')->render($response, 'index.html', [
59
+ 'name' => $args['name']
60
+ ]);
61
+ });
62
+
63
+ };
64
+ ```
65
+ ___________________________________________________________
66
+ (3)
6
- composer require php-di/php-di
67
+ my_slim_app/public/index.php の中身
68
+
69
+ ```
70
+ <?php
71
+ declare(strict_types=1);
72
+
73
+ use App\Application\Handlers\HttpErrorHandler;
74
+ use App\Application\Handlers\ShutdownHandler;
75
+ use App\Application\ResponseEmitter\ResponseEmitter;
76
+ use DI\ContainerBuilder;
77
+ use Slim\Factory\AppFactory;
78
+ use Slim\Factory\ServerRequestCreatorFactory;
79
+
80
+ require __DIR__ . '/../vendor/autoload.php';
81
+
82
+ // Instantiate PHP-DI ContainerBuilder
83
+ $containerBuilder = new ContainerBuilder();
84
+
85
+ if (false) { // Should be set to true in production
86
+ $containerBuilder->enableCompilation(__DIR__ . '/../var/cache');
87
+ }
88
+
89
+ // Set up settings
90
+ $settings = require __DIR__ . '/../app/settings.php';
91
+ $settings($containerBuilder);
92
+
93
+ // Set up dependencies
94
+ $dependencies = require __DIR__ . '/../app/dependencies.php';
95
+ $dependencies($containerBuilder);
96
+
97
+ // Set up repositories
98
+ $repositories = require __DIR__ . '/../app/repositories.php';
99
+ $repositories($containerBuilder);
100
+
101
+ // Build PHP-DI Container instance
7
- composer require slim/twig-view
102
+ $container = $containerBuilder->build();
103
+
104
+ // Instantiate the app
105
+ AppFactory::setContainer($container);
106
+ $app = AppFactory::create();
107
+ $callableResolver = $app->getCallableResolver();
108
+
109
+ // Register middleware
110
+ $middleware = require __DIR__ . '/../app/middleware.php';
111
+ $middleware($app);
112
+
113
+ // Register routes
114
+ $routes = require __DIR__ . '/../app/routes.php';
115
+ $routes($app);
116
+
117
+ /** @var bool $displayErrorDetails */
118
+ $displayErrorDetails = $container->get('settings')['displayErrorDetails'];
119
+
120
+ // Create Request object from globals
121
+ $serverRequestCreator = ServerRequestCreatorFactory::create();
122
+ $request = $serverRequestCreator->createServerRequestFromGlobals();
123
+
124
+ // Create Error Handler
125
+ $responseFactory = $app->getResponseFactory();
126
+ $errorHandler = new HttpErrorHandler($callableResolver, $responseFactory);
127
+
128
+ // Create Shutdown Handler
129
+ $shutdownHandler = new ShutdownHandler($request, $errorHandler, $displayErrorDetails);
130
+ register_shutdown_function($shutdownHandler);
131
+
132
+ // Add Routing Middleware
133
+ $app->addRoutingMiddleware();
134
+
135
+ // Add Error Middleware
136
+ $errorMiddleware = $app->addErrorMiddleware($displayErrorDetails, false, false);
137
+ $errorMiddleware->setDefaultErrorHandler($errorHandler);
138
+
139
+ // Run App & Emit Response
140
+ $response = $app->handle($request);
141
+ $responseEmitter = new ResponseEmitter();
142
+ $responseEmitter->emit($response);
143
+
8
144
  ```