За последние 24 часа нас посетили 22716 программистов и 1260 роботов. Сейчас ищут 789 программистов ...

ZendFramework 3 - batch запрос к JSON-RPC серверу

Тема в разделе "PHP для профи", создана пользователем [vs], 1 дек 2017.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Обнаружил, что хвалёный, кошерный и самый правильный фреймворк от создателя, включает в себя неполноценную имплементацию протокола JSON-RPC.
    Вы можете сделать мультизапрос, но не можете обработать с помощью встроенного сервера.
    Решил на скорую руку так
    PHP:
    1. class BatchServer extends \Zend\Json\Server\Server {
    2.  
    3.   protected function handleRequest() {
    4.     $request = $this->getRequest();
    5.     $raw = json_decode($request->getRawJson(), 1);
    6.     if (isset($raw[0]) && is_array($raw[0])) {
    7.       $responses = [];
    8.       foreach ($raw as $options) {
    9.         $request = new \Zend\Json\Server\Request\Http();
    10.         $request->setOptions($options);
    11.         parent::setRequest($request);
    12.         parent::handleRequest();
    13.         $responses[] = json_decode(parent::getReadyResponse()->toJson(), 1);
    14.       }
    15.       $this->setReturnResponse(true);
    16.       echo json_encode($responses);
    17.     } else {
    18.       parent::handleRequest();
    19.     }
    20.   }
    21.  
    22. }
    следовательно,
    PHP:
    1. //$server = new \Zend\Json\Server\Server();
    2.  $server = new BatchServer();
    Кстати, для неофитов - вот она, сила ООП!
     
  2. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    @[vs] Два раза
    PHP:
    1. parent::handleRequest();
    Не похоже на бест практисиз :)
     
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @keren Ухахахахаха. Тебе рано ещё в этот раздел заходить :) А особенно давать замечание там где ты вообще не понимаешь о чём говоришь.
     
  4. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    @askanim
    А ты прямо профессионал :)
    @Fell-x27 говорил про расшаривание с self, а parent похожее, только с родительским классом, если я правильно понял.
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    какую ты ерунду говоришь вот лучше бы просто молчал.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Смысл простой - не нужно копировать или писать обработку запроса. Если приходит мультивызов, то разбиваешь его на отдельные и заставляешь фреймворк обработать каждый.
    Если пришел обычный запрос, то сразу передаешь управление фреймворку.
     
    keren нравится это.
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    вот ты ему написал, а он даже не понимает что этот код делает :D
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @askanim вот пусть читает и учится)