DrQuincy Posted May 9, 2022 Share Posted May 9, 2022 I've searched for this but couldn't find anything but am maybe using the wrong terms. Is there a way to do something like exit('<p>an error occurred!</p>'); but still have ProcessWire “shutdown” normally? Specifically, I want to be able to not render the template but still run some logging code in finished.php. Is there a function for this? Thanks. Link to comment Share on other sites More sharing options...
ryan Posted May 9, 2022 Share Posted May 9, 2022 (edited) @DrQuincy Is this from a template file? You could do this: echo "<p>An error occurred!</p>"; return $this->halt(); That halts the rendering of output but lets PW finish everything else in the request. Another option is to throw a WireException. This will also halt the request but allow PW to still shutdown. The response is an http 500 error. The error message will be displayed if in debug mode or if the user is logged in and a superuser. throw new WireException("An error occurred!"); Often times on the front end a fatal error is about a resource not available, and a 404 is the appropriate response. So you can do this: throw new Wire404Exception(); or this does the same thing (I prefer this shorter version): wire404(); Lastly, while the above are preferable, it's also okay to do an exit() or a die(), is shouldn't break anything at least. Edited May 10, 2022 by ryan added return to $this->halt 4 Link to comment Share on other sites More sharing options...
Robin S Posted May 9, 2022 Share Posted May 9, 2022 @DrQuincy, when using $this->halt() I think it has to be return $this->halt() or else you still get the subsequent template output. Template file: Output: Template file: Output: 2 Link to comment Share on other sites More sharing options...
DrQuincy Posted May 10, 2022 Author Share Posted May 10, 2022 Thanks to you both, some very good suggestions. From the template file @Robin S is right, you need to use return. Actually though, just this will work: return '<p>An error occurred</p>'; What would be the advantage of: <p>An error occurred</p> <?php return $this->halt(); ?> What does halt() actually do? I am reluctant to use exit() as I have some code in finished.php to run so the above works well for me, thanks. Link to comment Share on other sites More sharing options...
AndZyk Posted May 10, 2022 Share Posted May 10, 2022 3 hours ago, DrQuincy said: What does halt() actually do? Here is the blog post about it: https://processwire.com/blog/posts/processwire-2.6.8-brings-new-version-of-reno-admin-theme-and-more/#new-this-gt-halt-method-for-use-in-template-files Quote Now you can call return $this->halt(); from within any template file, and it will prevent further output from that template file (and anything that comes after it, like an appendTemplateFile). This enables output to stop, but PW's normal execution and shutdown process to proceed normally. Please note that return $this->halt(); must be called from directly within the template file, outside of any function or class scope. 2 Link to comment Share on other sites More sharing options...
ryan Posted May 10, 2022 Share Posted May 10, 2022 @DrQuincy Yes, sorry, it should be "return $this->halt();" rather than just $this->halt(), I have updated my example. If you don't do a return then it'll still do the same thing (see below), but instead it'll continue executing your code in that file after the halt() call. What $this->halt(); does is tell the current request not to render any more files. So if you call $this->halt(); from your template file, then it's not going to include any further files specified to render afterwards. For instance, it will skip rendering your _main.php file (if you are using one). But everything else about the request will continue normally, so it does a normal shutdown, etc. 2 Link to comment Share on other sites More sharing options...
DrQuincy Posted May 10, 2022 Author Share Posted May 10, 2022 Got it! Thanks so much for your @ryan. Thanks for the link too @AndZyk, that explains it really well. 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now