Что же это такое?!

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Что же это такое?!

Сообщение vova07 »

Посоветуйте какое-то нормальное расширение для аякс загрузки файлов ?

Установил EajaxUpload выдает ошибку при попытке загрузить файл (тут : viewtopic.php?f=3&t=7816 вроде уже решали но ссылка битая, не смог понять в чем проблема) несмотря на то что Токен в запросе передается. В коде проверил все вроде есть, но копать глубже не охота. + вроде уже есть новая версия плагина, а екстейшен не обновлялся вроде.

XUpload тоже что-то не очень пашет, там вроде тоже новая версия плагина есть, но работает он только с ихним демо кодом, свое что-то трудновато добавлять, много переписывать.

PUpload не подходит для моей задачи ...

Есть еще что-то нормальное? или у меня руки кривые? Или же нужно будет самому написать с новыми версиями ?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Что же это такое?!

Сообщение anton44eg »

vova07 писал(а):но копать глубже не охота
думаю после этих слов ни кому не будет охота вам помогать :)
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Что же это такое?!

Сообщение vova07 »

Имелось введу что разбор чужого кода для меня в данной ситуации менее привлекателен чем написание самописного модуля.
Этот вывод я сделал только после того как прочитал тему что привел выше, погуглив еще, я нашел ту же ссылку где-то на другом форме, но она битая, но исходя из комментов там предлогалось переписать метод проверки запроса, и в случае необходимости отключать CSRF для нужного акшена ... после такого решения, охота разбирать данное расширение полностью пропало ... ибо как это грубейший костыль без каких либо обоснований. (Но я могу ошибаться, так как выводы делал чисто исходя из комментов)

То есть я не из ряда ... дайте мне готовый код ... а я скажу спасибо ... но в данной ситуации - может кто-то уже сравнивал существующие расширения и сделал для себя хороший выбор .... таким образом наведет на путь правильный.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Что же это такое?!

Сообщение kosenka »

vova07 писал(а):Посоветуйте какое-то нормальное расширение для аякс загрузки файлов ?

Установил EajaxUpload выдает ошибку при попытке загрузить файл (тут : viewtopic.php?f=3&t=7816 вроде уже решали но ссылка битая, не смог понять в чем проблема) несмотря на то что Токен в запросе передается.
Вся проблема в том, что токен не передается.
Для обхода этого я использую следующее расширение, которое "отключает проверку на CSRF" :

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

<?
/**
 * Description of HttpRequest
 *
 *
 * Used in config/main.php
 * <pre>
 *    'request'=>array(
 *        'class'=>'EHttpRequest',
 *        'noCsrfValidationRoutes'=>array(
 *            '^services/wsdl.*$'
 *        ),
 *        'enableCsrfValidation'=>true,
 *        'enableCookieValidation'=>true,
 *    ),
 * </pre>
 *
 * Every route will be interpreted as a regex pattern.
 *
 * @author alex
 */
class EHttpRequest extends CHttpRequest
{
    public $noCsrfValidationRoutes = array();

    protected function normalizeRequest()
    {
        parent::normalizeRequest();

        if($_SERVER['REQUEST_METHOD'] != 'POST') return;

        $route = Yii::app()->getUrlManager()->parseUrl($this);
        if($this->enableCsrfValidation)
        {
            foreach($this->noCsrfValidationRoutes as $cr)
            {
                if(preg_match('#'.$cr.'#', $route)){
                    Yii::app()->detachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
                    Yii::trace('Route "'.$route.' passed without CSRF validation');
                    break; // found first route and break
                }
            }
        }
    }

}
В файле config/main.php пропишите:

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

                'request'=>array(
                        'class' => 'ext.EHttpRequest',
                        'noCsrfValidationRoutes'=>array(
                                                        '^files/upload.*$', //т.е. если запросе начинается с "files/upload" , то CSRF будет проигнорирован
                                                        //'^test/EAjaxUpload.*$',
                                                       ),
                        'enableCookieValidation'=>true,
                        'enableCsrfValidation'=>true,
                ),
Попробуйте
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Что же это такое?!

Сообщение vova07 »

kosenka спасибо за ответ! И за сам код.

(Видимо я правильно понял из комментов.)
Скажу почему мне не нравится это решение : (на 100% согласен что проблему она решает но ...) появляется лишнее телодвижение, для ГЕТ запросов, которое добавляет нагрузку без реальной надобности. (это грубый костыль как по мне).
Аргументирую ... ошибка состоит в том что запрос не передаёт "Токен", что само по себе означает что эта проблема решается простым , и правильным методом : "Вставка токена в запрос" - такая возможность есть всегда ... таким образом делать костыли для решение такой проблемы просто неправильно.

Но есть другая проблема : в запросе Токен вроде как передаётся, только вот неизвестно почему не работает.
Остаются два варианта : копать код, и разбираться что там вообще передаётся и как, или же взять последнюю версию Jquery-Upload-File или Fine-Upload и написать под определённый плагин свой модуль. (Несмотря на то что XUpload и Eajaxupload работают именно с ними, апгрейд плагина на их основе сделать будет трудно, только потому что сильно уж там все поменялось у разработчиков плгинов почему-то). Я думал что есть другие расширения, но видимо писать нужно будет ... или если времени не будет, то придется копать что есть :)
Аватара пользователя
zolton007
Сообщения: 180
Зарегистрирован: 2013.08.16, 08:43
Откуда: Воронеж

Re: Что же это такое?!

Сообщение zolton007 »

Всем привет!

Тоже понадобилось подружить EAjaxUpload с CSRF не отключая проверку токена при загрузке файла. Никто случайно не нашел решения? Токен вроде передается, не понятно почему вылазит ошибка :?
Ответить