GridView в модальном окне - фильтрация

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

GridView в модальном окне - фильтрация

Сообщение porcelanosa »

Самый важный момент: на сервере работает - на локале (OpenServer) - нет
Есть модальное окно - в которое подгружается GridView -
В контоллере обрабатывающем AJAX запрос есть такая вот строчка

Код: Выделить всё

public function actionProductGrid($id = null, $type = self::GRID_TYPE_LIST, $promo_id = null)
        {
            if ( ! Yii::$app->getRequest()->isAjax) {
                throw new BadRequestHttpException('Method not allowed');
            }
фильтрация тоже работает, но если очистить фильтр, то запрос идет без pjax=true и перехватывается вышеприведенной строкой кода.
С чем это может быть связано?
Версии PHP и на сервере и на локале примерно одинаковые 7.3.ххх
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: GridView в модальном окне - фильтрация

Сообщение samdark »

Не с версией PHP. Версия jQuery, например.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: GridView в модальном окне - фильтрация

Сообщение porcelanosa »

samdark писал(а): 2021.04.05, 20:20 Не с версией PHP. Версия jQuery, например.
Это одна ветка репозитория - на сервере запускается composer для установки пакетов.
Код полностью идентичный.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: GridView в модальном окне - фильтрация

Сообщение samdark »

Предлагаю слогировать все данные реквеста (а особенно HTTP-заголовки) и запостить сюда (ну или можно сразу в двух местах сравнить). Станет понятно.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: GridView в модальном окне - фильтрация

Сообщение porcelanosa »

Запрос при очистке фильтра
На сервер:

Код: Выделить всё

2021-04-08 07:01:20 [2.92.125.172][4][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 2.92.125.172
    in /var/www/porcelanosa/data/www/mrrtp.com/vendor/kartik-v/yii2-grid/src/GridView.php:2023
    in /var/www/porcelanosa/data/www/mrrtp.com/vendor/kartik-v/yii2-grid/src/GridView.php:1205
    in /var/www/porcelanosa/data/www/mrrtp.com/themes/apl2/user-promotion/product-grid.php:104
2021-04-08 07:01:20 [2.92.125.172][4][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 2.92.125.172
    in /var/www/porcelanosa/data/www/mrrtp.com/vendor/kartik-v/yii2-grid/src/GridView.php:2023
    in /var/www/porcelanosa/data/www/mrrtp.com/vendor/kartik-v/yii2-grid/src/GridView.php:1205
    in /var/www/porcelanosa/data/www/mrrtp.com/themes/apl2/user-promotion/product-grid.php:104
2021-04-08 07:01:20 [2.92.125.172][4][-][info][application] $_GET = [
    'Product' => [
        'chain' => ''
        'unfi_short_code' => ''
        'upc' => ''
        'wakefern_code' => ''
        'brand_long' => ''
        'pack' => ''
        'size' => ''
        'description' => ''
        'status' => ''
        'srp_table' => ''
        'product_type' => ''
    ]
    '_pjax' => '#user-product-grid-pjax'
]

$_POST = []

$_FILES = []

$_COOKIE = [
    'PHPSESSID' => '19cb713b4d884f5903c0ff00468bdba5'
    '_csrf' => 'c8ec324bbd14443b7d02041df1767b28302b2a288206040cf596ba4dc63cef28a:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"bVtVC7RwfjMfOqLKAlMgcRg5wdtJx1Is\";}'
    '_identity' => 'e341aeefb15b1c8bcd4805990023148bce7f628744bfabdf85df7cb5c98f6a84a:2:{i:0;s:9:\"_identity\";i:1;s:16:\"[4,null,2592000]\";}'
]

$_SESSION = [
    '__flash' => []
    '__returnUrl' => 'https://mrrtp.com/user-promotion/new'
    '__id' => 4
    '__authKey' => null
]

$_SERVER = [
    'REDIRECT_REDIRECT_HTTPS' => 'on'
    'REDIRECT_REDIRECT_UNIQUE_ID' => 'YG7wkNiyRoZr8PBYf1tXkgAAAAU'
    'REDIRECT_REDIRECT_STATUS' => '200'
    'REDIRECT_HTTPS' => 'on'
    'REDIRECT_UNIQUE_ID' => 'YG7wkNiyRoZr8PBYf1tXkgAAAAU'
    'REDIRECT_HANDLER' => 'application/x-httpd-php5'
    'REDIRECT_STATUS' => '200'
    'HTTPS' => 'on'
    'UNIQUE_ID' => 'YG7wkNiyRoZr8PBYf1tXkgAAAAU'
    'HTTP_HOST' => 'mrrtp.com'
    'HTTP_X_FORWARDED_PROTO' => 'https'
    'HTTP_X_FORWARDED_PORT' => '443'
    'HTTP_CONNECTION' => 'close'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
    'HTTP_ACCEPT' => 'text/html, */*; q=0.01'
    'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate, br'
    'HTTP_X_CSRF_TOKEN' => '4KdfxDS9GB850ARtXVjaV0t0mcHa__WbmmYOiKv8SmyC8SuSd4pKaF-6SQsSKZYcChjUprmtkq7tAnrC080DHw=='
    'CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=UTF-8'
    'HTTP_X_PJAX' => 'true'
    'HTTP_X_PJAX_CONTAINER' => '#user-product-grid-pjax'
    'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'
    'HTTP_REFERER' => 'https://mrrtp.com/user-promotion/new'
    'HTTP_COOKIE' => 'PHPSESSID=19cb713b4d884f5903c0ff00468bdba5; _csrf=c8ec324bbd14443b7d02041df1767b28302b2a288206040cf596ba4dc63cef28a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22bVtVC7RwfjMfOqLKAlMgcRg5wdtJx1Is%22%3B%7D; _identity=e341aeefb15b1c8bcd4805990023148bce7f628744bfabdf85df7cb5c98f6a84a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A16%3A%22%5B4%2Cnull%2C2592000%5D%22%3B%7D'
    'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin'
    'SERVER_SIGNATURE' => ''
    'SERVER_SOFTWARE' => 'Apache/2.4.6 (CentOS) mpm-itk/2.4.7-01 OpenSSL/1.0.2k-fips PHP/5.6.37 mod_wsgi/4.6.5 Python/3.6'
    'SERVER_NAME' => 'mrrtp.com'
    'SERVER_ADDR' => '127.0.0.1'
    'SERVER_PORT' => '80'
    'REMOTE_ADDR' => '2.92.125.172'
    'DOCUMENT_ROOT' => '/var/www/porcelanosa/data/www/mrrtp.com/web'
    'REQUEST_SCHEME' => 'http'
    'CONTEXT_PREFIX' => '/php-bin/'
    'CONTEXT_DOCUMENT_ROOT' => '/var/www/php-bin-isp-php74/porcelanosa/'
    'SERVER_ADMIN' => 'webmaster@mrrtp.com'
    'SCRIPT_FILENAME' => '/var/www/porcelanosa/data/www/mrrtp.com/web/index.php'
    'REMOTE_PORT' => '58455'
    'REDIRECT_QUERY_STRING' => 'Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D=&_pjax=%23user-product-grid-pjax'
    'REDIRECT_URL' => '/index.php'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'SERVER_PROTOCOL' => 'HTTP/1.0'
    'REQUEST_METHOD' => 'GET'
    'QUERY_STRING' => 'Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D=&_pjax=%23user-product-grid-pjax'
    'REQUEST_URI' => '/user-promotion/product-grid?Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D=&_pjax=%23user-product-grid-pjax'
    'SCRIPT_NAME' => '/index.php'
    'ORIG_SCRIPT_FILENAME' => '/var/www/php-bin-isp-php74/porcelanosa/php'
    'ORIG_PATH_INFO' => '/index.php'
    'ORIG_PATH_TRANSLATED' => '/var/www/porcelanosa/data/www/mrrtp.com/web/index.php'
    'ORIG_SCRIPT_NAME' => '/php-bin/php'
    'PHP_SELF' => '/index.php'
    'REQUEST_TIME_FLOAT' => 1617883280.424
    'REQUEST_TIME' => 1617883280
]
На локале:

Код: Выделить всё

2021-04-08 07:06:07 [127.0.0.1][4][5vb3k154uglra5dli564pkvilveekaov][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Method not allowed in F:\domains\esia.local\controllers\UserPromotionController.php:302
Stack trace:
#0 [internal function]: app\controllers\UserPromotionController->actionProductGrid(NULL, 'list', NULL)
#1 F:\domains\esia.local\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#2 F:\domains\esia.local\vendor\yiisoft\yii2\base\Controller.php(181): yii\base\InlineAction->runWithParams(Array)
#3 F:\domains\esia.local\vendor\yiisoft\yii2\base\Module.php(534): yii\base\Controller->runAction('product-grid', Array)
#4 F:\domains\esia.local\vendor\yiisoft\yii2\web\Application.php(104): yii\base\Module->runAction('user-promotion/...', Array)
#5 F:\domains\esia.local\vendor\yiisoft\yii2\base\Application.php(392): yii\web\Application->handleRequest(Object(yii\web\Request))
#6 F:\domains\esia.local\web\index.php(22): yii\base\Application->run()
#7 {main}
2021-04-08 07:06:07 [127.0.0.1][4][5vb3k154uglra5dli564pkvilveekaov][info][application] $_GET = [
    'Product' => [
        'chain' => ''
        'unfi_short_code' => ''
        'upc' => ''
        'wakefern_code' => ''
        'brand_long' => ''
        'pack' => ''
        'size' => ''
        'description' => ''
        'status' => ''
        'srp_table' => ''
        'product_type' => ''
    ]
]

$_POST = []

$_FILES = []

$_COOKIE = [
    'PHPSESSID' => '5vb3k154uglra5dli564pkvilveekaov'
    '_identity' => 'e341aeefb15b1c8bcd4805990023148bce7f628744bfabdf85df7cb5c98f6a84a:2:{i:0;s:9:\"_identity\";i:1;s:16:\"[4,null,2592000]\";}'
    '_csrf' => 'a3102d7f848b7be3c0bbce759eb21a0e33fd3ffcd11714beaf796fad32959e0ba:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"spaIwl5rQlR0JBuUpokNL7i-YaWVqUx2\";}'
]

$_SESSION = [
    '__flash' => []
    '__returnUrl' => 'http://esia.local/'
    '__id' => 4
    '__authKey' => null
]

$_SERVER = [
    'REDIRECT_STATUS' => '200'
    'HTTP_HOST' => 'esia.local'
    'HTTP_CONNECTION' => 'keep-alive'
    'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
    'HTTP_DNT' => '1'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
    'HTTP_REFERER' => 'http://esia.local/user-promotion/product-grid?Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=179&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D='
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,fi;q=0.6'
    'HTTP_COOKIE' => 'PHPSESSID=5vb3k154uglra5dli564pkvilveekaov; _identity=e341aeefb15b1c8bcd4805990023148bce7f628744bfabdf85df7cb5c98f6a84a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A16%3A%22%5B4%2Cnull%2C2592000%5D%22%3B%7D; _csrf=a3102d7f848b7be3c0bbce759eb21a0e33fd3ffcd11714beaf796fad32959e0ba%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22spaIwl5rQlR0JBuUpokNL7i-YaWVqUx2%22%3B%7D'
    'PATH' => 'e:\\openserver-5.3.6\\ospanel\\modules\\php\\PHP_7.3\\ext;e:\\openserver-5.3.6\\ospanel\\modules\\php\\PHP_7.3\\pear;e:\\openserver-5.3.6\\ospanel\\modules\\php\\PHP_7.3\\pear\\bin;e:\\openserver-5.3.6\\ospanel\\modules\\php\\PHP_7.3;e:\\openserver-5.3.6\\ospanel\\modules\\wget\\bin;e:\\openserver-5.3.6\\ospanel\\modules\\database\\MySQL-5.7\\bin;e:\\openserver-5.3.6\\ospanel\\modules\\http\\Apache_2.4-PHP_7.2-7.4\\bin;e:\\openserver-5.3.6\\ospanel\\modules\\http\\Apache_2.4-PHP_7.2-7.4;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\system32\\Wbem;C:\\WINDOWS\\SysWOW64'
    'SystemRoot' => 'C:\\WINDOWS'
    'COMSPEC' => 'C:\\WINDOWS\\system32\\cmd.exe'
    'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW'
    'WINDIR' => 'C:\\WINDOWS'
    'SERVER_SIGNATURE' => ''
    'SERVER_SOFTWARE' => 'Apache'
    'SERVER_NAME' => 'esia.local'
    'SERVER_ADDR' => '127.0.0.1'
    'SERVER_PORT' => '80'
    'REMOTE_ADDR' => '127.0.0.1'
    'DOCUMENT_ROOT' => 'F:/domains/esia.local/web'
    'REQUEST_SCHEME' => 'http'
    'CONTEXT_PREFIX' => ''
    'CONTEXT_DOCUMENT_ROOT' => 'F:/domains/esia.local/web'
    'SERVER_ADMIN' => '[no address given]'
    'SCRIPT_FILENAME' => 'F:/domains/esia.local/web/index.php'
    'REMOTE_PORT' => '8324'
    'REDIRECT_URL' => '/user-promotion/product-grid'
    'REDIRECT_QUERY_STRING' => 'Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D='
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'REQUEST_METHOD' => 'GET'
    'QUERY_STRING' => 'Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D='
    'REQUEST_URI' => '/user-promotion/product-grid?Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D='
    'SCRIPT_NAME' => '/index.php'
    'PHP_SELF' => '/index.php'
    'REQUEST_TIME_FLOAT' => 1617883567.222
    'REQUEST_TIME' => 1617883567
    'argv' => [
        0 => 'Product%5Bchain%5D=&Product%5Bunfi_short_code%5D=&Product%5Bupc%5D=&Product%5Bwakefern_code%5D=&Product%5Bbrand_long%5D=&Product%5Bpack%5D=&Product%5Bsize%5D=&Product%5Bdescription%5D=&Product%5Bstatus%5D=&Product%5Bsrp_table%5D=&Product%5Bproduct_type%5D='
    ]
    'argc' => 1
]
Очевидное отличие - отсутствие

Код: Выделить всё

'_pjax' => '#user-product-grid-pjax'
в запросе на локале.
и вот этих полей в $_SERVER

Код: Выделить всё

'HTTP_X_PJAX' => 'true'
    'HTTP_X_PJAX_CONTAINER' => '#user-product-grid-pjax'
    'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'
Но это - по-моему, следствие.
На что еще можно посмотреть?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: GridView в модальном окне - фильтрация

Сообщение samdark »

Это причина, не следствие. PJAX именно по этим полям и определяется. Осталось понять, почему не отправляется. Скорее всего подсказка есть в консольке dev tools хрома.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: GridView в модальном окне - фильтрация

Сообщение porcelanosa »

samdark писал(а): 2021.04.09, 11:04 Это причина, не следствие. PJAX именно по этим полям и определяется. Осталось понять, почему не отправляется. Скорее всего подсказка есть в консольке dev tools хрома.
Перерыла все в консоле (смотрю кто инициировал отправку запроса и т.д.)

- еще напрягает то, что фильтр работает при введении данных - и только при пустых данных вызывает ошибку, будь то текстовое поле или селект. Сортировка тоже работает :-)
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: GridView в модальном окне - фильтрация

Сообщение masson »

porcelanosa писал(а): 2021.04.05, 19:48 фильтрация тоже работает, но если очистить фильтр, то запрос идет без pjax=true ....
Очистить фильтр это как выглядит?
Может где-то выставлено data-pjax=0 ?
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: GridView в модальном окне - фильтрация

Сообщение porcelanosa »

masson писал(а): 2021.04.12, 16:15
porcelanosa писал(а): 2021.04.05, 19:48 фильтрация тоже работает, но если очистить фильтр, то запрос идет без pjax=true ....
Очистить фильтр это как выглядит?
Может где-то выставлено data-pjax=0 ?
Просто стираю значения из текстового input или для Select выбираю пустое значение.
Таблица то одна и та же - и фильтрация работает - т.е. можно ввести в разные поля несколько значений - очистить одно - другое.
Но как только мы посылаем пустой запрос - т.е. запрос в котором все поля пусты, то происходит ошибка, описанная выше.
Эта же таблица (т.е. буквально эта же View-ха ) используется без модального окна и там все работает как надо.
Ну там и проверки на isAjax нет.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: GridView в модальном окне - фильтрация

Сообщение masson »

Кроме как дебажить yiiGridView("applyFilter") других мыслей пока нет
Ответить