Реализация пользовательской страницы ошибок 500 для исключений в Symfony 1.4

«Упс, произошла ошибка», запоминающееся сообщение об исключениях, отображаемых в проектах на основе Symfony 1.4, когда они конкретно на производственной среде. Страница ошибок по умолчанию в Symfony довольно информативна для пользователя, в основном она говорит, что то, что они пытались сделать, не могло быть достигнуто по причине «х».

Обычно вы не хотите показывать причину исключения пользователю, вы просто хотите заметить ему, что что-то не так, однако очень важно показать страницу с ошибкой, которая связана с дизайном всего вашего проекта, то есть почему в Symfony 1.4 можно переопределить страницу ошибок 500 по умолчанию на другую. В этой статье мы покажем вам, как переопределить его, просто создав новый файл в определенной директории вашего проекта.

Создание пользовательской страницы ошибок 500

Чтобы настроить страницу ошибки 500, используемую symfony в производственной среде, вам нужно создать новый каталог с именем error внутри /config папка всего приложения или уровня под-приложения, например yourproject/config (для страницы ошибок, не относящейся к конкретному приложению) или если у вас есть дополнительные приложения yourproject/apps//config, Внутри этого каталога вам нужно всего лишь создать пустой PHP-файл с именем error.html.php, Например, в нашем проекте у нас есть 2 подприложения, однако мы хотим, чтобы для них обоих была страница по одной ошибке, поэтому мы поместим шаблон ошибки в config/error каталог проекта:

Пользовательская страница ошибок Symfony 1.4

Далее вам нужно всего лишь написать свой шаблон HTMl в error.html.phpобратите внимание, что вы также сможете делать PHP-вещи, связанные с Symfony 1.4. Например, используя страницу ошибки 500 с открытым исходным кодом, содержание нашего error.html.php шаблон может быть что-то вроде:


We've got some trouble | 500 - Webservice currently unavailable
/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}/*! Simple HttpErrorPages | MIT X11 License | https://github.com/AndiDittrich/HttpErrorPages */body,html{width:100%;height:100%;background-color:#21232a}body{color:#fff;text-align:center;text-shadow:0 2px 4px rgba(0,0,0,.5);padding:0;min-height:100%;-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,.8);box-shadow:inset 0 0 100px rgba(0,0,0,.8);display:table;font-family:"Open Sans",Arial,sans-serif}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;font-size:36px}h1 small{font-size:68%;font-weight:400;line-height:1;color:#777}a{text-decoration:none;color:#fff;font-size:inherit;border-bottom:dotted 1px #707070}.lead{color:silver;font-size:21px;line-height:1.4}.cover{display:table-cell;vertical-align:middle;padding:0 20px}footer{position:fixed;width:100%;height:40px;left:0;bottom:0;color:#a0a0a0;font-size:14px}
Webservice currently unavailable Error 500

An unexpected condition was encountered. Our service team has been dispatched to bring it back online.

Наконец, очистите кеш вашего проекта Symfony, используя:

php symfony cc

И каждый раз, когда в производственной среде выдается исключение, вы увидите пользовательскую страницу ошибки:

Заметка

Не забывайте, что для тестирования страницы вам нужно быть в среде Prod (без frontend_dev.php), а не среда разработки. В противном случае вы всегда будете видеть трассировку стека Symfony.

Страница пользовательских ошибок Symfony 1.4

Ссылка на основную публикацию
Adblock
detector