4
4
5
5
use Closure ;
6
6
use Illuminate \Http \Request ;
7
+ use Illuminate \Support \Facades \Redirect ;
7
8
use Symfony \Component \HttpFoundation \Response ;
8
9
9
10
class Middleware
@@ -82,57 +83,57 @@ public function handle(Request $request, Closure $next)
82
83
});
83
84
84
85
Inertia::share ($ this ->share ($ request ));
85
-
86
86
Inertia::setRootView ($ this ->rootView ($ request ));
87
87
88
88
$ response = $ next ($ request );
89
- $ response = $ this ->checkVersion ($ request , $ response );
90
89
91
- return $ this ->changeRedirectCode ($ request , $ response );
90
+ if (! $ request ->header ('X-Inertia ' )) {
91
+ return $ response ;
92
+ }
93
+
94
+ if ($ request ->method () === 'GET ' && $ request ->header ('X-Inertia-Version ' , '' ) !== Inertia::getVersion ()) {
95
+ $ response = $ this ->onVersionChange ($ request , $ response );
96
+ }
97
+
98
+ if ($ response ->isOk () && empty ($ response ->getContent ())) {
99
+ $ response = $ this ->onEmptyResponse ($ request , $ response );
100
+ }
101
+
102
+ if ($ response ->getStatusCode () === 302 && in_array ($ request ->method (), ['PUT ' , 'PATCH ' , 'DELETE ' ])) {
103
+ $ response ->setStatusCode (303 );
104
+ }
105
+
106
+ return $ response ;
92
107
}
93
108
94
109
/**
95
- * In the event that the assets change, initiate a
96
- * client-side location visit to force an update .
110
+ * Determines what to do when an Inertia action returned with no response.
111
+ * By default, we'll redirect the user back to where they came from .
97
112
*
98
113
* @param Request $request
99
114
* @param Response $response
100
115
* @return Response
101
116
*/
102
- public function checkVersion (Request $ request , Response $ response )
117
+ public function onEmptyResponse (Request $ request , Response $ response ): Response
103
118
{
104
- if ($ request ->header ('X-Inertia ' ) &&
105
- $ request ->method () === 'GET ' &&
106
- $ request ->header ('X-Inertia-Version ' , '' ) !== Inertia::getVersion ()
107
- ) {
108
- if ($ request ->hasSession ()) {
109
- $ request ->session ()->reflash ();
110
- }
111
-
112
- return Inertia::location ($ request ->fullUrl ());
113
- }
114
-
115
- return $ response ;
119
+ return Redirect::back ();
116
120
}
117
121
118
122
/**
119
- * Changes the status code during redirects, ensuring they are made as
120
- * GET requests, preventing "MethodNotAllowedHttpException" errors .
123
+ * Determines what to do when the Inertia asset version has changed.
124
+ * By default, we'll initiate a client-side location visit to force an update .
121
125
*
122
126
* @param Request $request
123
127
* @param Response $response
124
128
* @return Response
125
129
*/
126
- public function changeRedirectCode (Request $ request , Response $ response )
130
+ public function onVersionChange (Request $ request , Response $ response ): Response
127
131
{
128
- if ($ request ->header ('X-Inertia ' ) &&
129
- $ response ->getStatusCode () === 302 &&
130
- in_array ($ request ->method (), ['PUT ' , 'PATCH ' , 'DELETE ' ])
131
- ) {
132
- $ response ->setStatusCode (303 );
132
+ if ($ request ->hasSession ()) {
133
+ $ request ->session ()->reflash ();
133
134
}
134
135
135
- return $ response ;
136
+ return Inertia:: location ( $ request -> fullUrl ()) ;
136
137
}
137
138
138
139
/**
@@ -142,7 +143,7 @@ public function changeRedirectCode(Request $request, Response $response)
142
143
* @param Request $request
143
144
* @return object
144
145
*/
145
- public function resolveValidationErrors (Request $ request )
146
+ protected function resolveValidationErrors (Request $ request )
146
147
{
147
148
if (! $ request ->session ()->has ('errors ' )) {
148
149
return (object ) [];
0 commit comments