За последние 24 часа нас посетили 19943 программиста и 998 роботов. Сейчас ищут 297 программистов ...

Не ловится пользовательское исключение

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 31 мар 2022.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    PHP:
    1. Config::setArray(array_merge_recursive(...array_map(fn($file) => include $file, glob('config/*.php'))));
    2.  
    3. new Debug(Config::get('debug.mod') /* тут создаю ошибку (mod вместо mode) */, Config::get('debug.logs'));
    Метод без выброса

    PHP:
    1. public static function get($keys = null)
    2. {
    3.     if (!$keys) {
    4.         return self::$array;
    5.     }
    6.  
    7.     $data = self::$array;
    8.     $array = '';
    9.  
    10.     foreach (explode('.', $keys) as $key) {
    11.  
    12.         if (!is_array($data) || !array_key_exists($key, $data)) {
    13. //                throw new Exception("Не найден $key-массив или $key-ключ массива: $array");
    14.         }
    15.  
    16.         $data = $data[$key];
    17.         $array .= "['$key' => ";
    18.     }
    19.  
    20.     return $data;
    21. }
    Результат: https://ibb.co/5xCpFF4

    С выбросом

    PHP:
    1. public static function get($keys = null)
    2. {
    3.     if (!$keys) {
    4.         return self::$array;
    5.     }
    6.  
    7.     $data = self::$array;
    8.     $array = '';
    9.  
    10.     foreach (explode('.', $keys) as $key) {
    11.  
    12.         if (!is_array($data) || !array_key_exists($key, $data)) {
    13.             throw new Exception("Не найден $key-массив или $key-ключ массива: $array");
    14.         }
    15.  
    16.         $data = $data[$key];
    17.         $array .= "['$key' => ";
    18.     }
    19.  
    20.     return $data;
    21. }
    Результат: https://ibb.co/s2P8hRL
    Как отловить пользовательское исключение при передаче конфигов в обработчик ошибок?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Я до сих пор не понимаю, каким хером программисты пытаются свой велосипед сделать с пользовательским обработчиком, вылавливая ошибки. Вот в xуй вам он вперся ? На Хре На ? Тем более если использовать Debug в PHPStorm


    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. namespace Nouvu\Framework\Http;
    6.  
    7. use Symfony\Component\Routing\Exception\ResourceNotFoundException AS SymfonyRoutingNotFound;
    8. use Symfony\Component\HttpFoundation\Response;
    9. use Nouvu\Framework\Foundation\Application AS App;
    10. use Nouvu\Framework\Http\Controllers\KernelController;
    11. use Nouvu\Framework\Routing\{
    12.     RouteCollection AS NouvuCollection, RequestContext AS NouvuContext, UrlMatcher AS NouvuMatcher,
    13.     CollectionTrait, ContextTrait
    14. };
    15. use Nouvu\Framework\View\{ Repository\CommitRepository, Builder\Content };
    16. use Nouvu\Resources\Controllers;
    17.  
    18. class Kernel
    19. {
    20.     ...
    21.  
    22.     public function send()
    23.     {
    24.         $context = $this -> context();
    25.      
    26.         $context -> copyRequest( $this -> app -> request );
    27.      
    28.         $matcher = $this -> getMatcher( $this -> collection(), $context );
    29.      
    30.         try
    31.         {
    32.             $this -> terminal( $this -> handle( $matcher ) );
    33.         }
    34.         catch ( \Throwable $e )
    35.         {
    36.             if ( $this -> app -> repository -> get( 'config.debug.display' ) )
    37.             {
    38.                 throw $e;
    39.             }
    40.          
    41.             $this -> setRequestAttributes( $this -> getAttributesError( $matcher ) );
    42.          
    43.             $this -> terminal( $this -> getCommit() );
    44.         }
    45.     }
    46. }
     
    #2 MouseZver, 31 мар 2022
    Последнее редактирование: 31 мар 2022
    Вероломство нравится это.
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    Шобы разрабу вот это: https://ibb.co/yBnHMst
    А пользуну вот это: https://ibb.co/stGsySK

    :)
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    а с каких пор логика NotFoundPage считается ошибкой ?


    Сноси и делай Router. От него выкидывай специальное исключение RoutingNotFound, которое перехватится на границе выхлопа. Выдашь всем страницу 404 и если тебе так нужно - запишешь в журнал логов остальное.

    2022-03-31_21-15-53.png 2022-03-31_21-14-13.png Screenshot 2022-03-31 at 21-14-46 Страница не найдена Nouvu.png
     
    Вероломство нравится это.
  5. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    с тех пор как разраб вызывает созданный экшен, но забыл роут для него добавить в массив роутов :)
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    а с каких пор логика NotFoundPage считается ошибкой ?
     
  7. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    где?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Ладно. "В вашем коде, логика не обнаружена (с)" o_O
     
    Вероломство нравится это.
  9. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24