Ответы пользователя по тегу Yii
  • Yi2 Rules extenstions неправильно работают?

    cr1gger
    @cr1gger Автор вопроса
    Все дороги ведут в Рим — встретимся в Риме!
    Как и написал в коде IvanMogilev проблема была в checkExtensionByMimeType.
    Тот файл с расширением xls который я грузил собирался через php как выгрузка. И видимо библиотека которую используют не прописывает Mime Type, а в Yii по умолчанию эта проверка включена: https://www.yiiframework.com/doc/api/2.0/yii-valid...
    Ответ написан
    Комментировать
  • Есть ли на Yii2 нормальные websocket'ы?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Зачем именно под yii ищешь. Бери шире)
    https://github.com/walkor/Workerman

    Сам пользуюсь ею на Yii2 и нормально все

    Можешь на мой ГК посмотреть :D
    Но лучше его конечно переписать на адекватный код, потому что это я писал чтобы написать, работает и ладно
    chat на вебсокетах

    <?php
    
    use Workerman\Worker;
    require_once __DIR__ . '/vendor/autoload.php';
    
    $unique_users = [];
    $context = array(
        'ssl' => array(
            'local_cert'  => __DIR__ . '/privatessl/cert.pem',
            'local_pk'    => __DIR__ . '/privatessl/key.key',
            'verify_peer' => false,
        )
    );
    
    // Create a Websocket server with ssl context.
    $ws_worker = new Worker('websocket://website.ru:6374', $context);
    
    $ws_worker->transport = 'ssl';
    
    $ws_worker->onMessage = function ($connection, $data) use ($ws_worker, &$unique_users) {
        $response = json_decode($data);
        ## Команды ##
        if (isset($response->command)) {
    
            ## Получение пользователей онлайн ##
            if ($response->command == 'getOnline') {
    
                $connection->send(getOnline($unique_users));
            }
            ## Отправка нового сообщения ##
            if ($response->command == 'sendMessage' && isset($response->message) && !empty($response->message)) {
                sendMessage(
                    $response->message,
                    $response->login,
                    $response->avatar,
                    $ws_worker,
                    $connection
            );
            }
        }
    };
    $ws_worker->onConnect = function($connection) use (&$unique_users)
    {
        $ip = $connection->getRemoteIp();
        if (!in_array($ip, $unique_users))
        {
            $unique_users[] = $ip;
        }
    };
    $ws_worker->onClose = function($connection) use (&$unique_users)
    {
        $ip = $connection->getRemoteIp();
        $index = array_search($ip, $unique_users);
        unset($unique_users[$index]);
    };
    function getOnline($unique_users)
    {
        $online = [
            'action' => 'online',
            'body' => count($unique_users),
        ];
        return json_encode($online);
    }
    function sendMessage($message,$login, $avatar, $worker, $connection)
    {
        $body = [
            'action' => 'newMessage',
            'body' => $message,
            'login' => $login,
            'avatar' => $avatar,
            'time' => date('d.m.Y в H:i', (time() + 10800))
        ];
        foreach ($worker->connections as $client) {
            $client->send(json_encode($body));
        }
        addMessageDB($message, $login, $avatar);
    }
    function prepareText($text)
    {
        return htmlspecialchars($text);
    }
    function addMessageDB($message, $login, $avatar){
        $db_config = require(__DIR__ . '/config/db.php');
        $db = new PDO($db_config['dsn'] . ';charset=' . $db_config['charset'], $db_config['username'], $db_config['password']);
        $sth = $db->prepare('INSERT INTO chat_message (message, created_at, login, avatar) VALUES (:mess, :create_time, :login, :avatar)');
        $sth->execute([
            ':mess' => prepareText($message),
            ':create_time' => time(),
            ':login' => prepareText($login),
            ':avatar' => prepareText($avatar),
        ]);
        return $sth->fetchAll(PDO::FETCH_ASSOC);
    }
    Worker::runAll();

    Ответ написан
    Комментировать
  • Как правильно подключить несколько классов в собственном Yii2-компоненте?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    знак доллара забыл перед app
    Ответ написан
    Комментировать
  • Как правильно настроить роут в urlManager?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    'page/<slug:\w+>.html' => 'page/article/post.html?slug=<slug:\w+>'


    Просто разберем, ключ(первый текст) он нужен для того чтобы принять шаблон url там ты пишешь какой урл ты хочешь видеть.
    В значении (второй текст) пишешь путь куда этот запрос посылать без регулярок.
    Следовательно у тебя должно получится так:

    'page/<slug:[\w\-_\d]+>.html' => 'page/article/post'


    Я сейчас точно не скажу, но если это модуль там есть свои тонкости, попробуй еще поставить в значении перед page /
    так:
    'page/<slug:[\w\-_\d]+>.html' => '/page/article/post'


    Соответственно в actionPost нужно указать аргументом переменную slug
    Ответ написан
  • Как быть, если нужно работать с cms на фреймворке, который я не знаю?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    учить фрейм
    Ответ написан
    Комментировать
  • Как сохранить XML-файл при помощи Yii2?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Её не нужно сохранять. Сразу выводишь во view
    А в конфиге в urlManager пишешь:
    [
        ...
        'sitemap.xml' => 'site/sitemap'
        ...
    ]


    И ты открываешь ссылку https://site.ru/sitemap.xml
    У тебя там карта твоя
    Ответ написан
    2 комментария
  • Как сделать чтобы доступ к странице был только через мобильное приложение?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    var userDeviceArray = [
        {device: 'Android', platform: /Android/},
        {device: 'iPhone', platform: /iPhone/},
        {device: 'iPad', platform: /iPad/},
        {device: 'Symbian', platform: /Symbian/},
        {device: 'Windows Phone', platform: /Windows Phone/},
        {device: 'Tablet OS', platform: /Tablet OS/},
        {device: 'Linux', platform: /Linux/},
        {device: 'Windows', platform: /Windows NT/},
        {device: 'Macintosh', platform: /Macintosh/}
    ];
    var platform = navigator.userAgent;
    
    function getPlatform() {
        for (var i in userDeviceArray) {
            if (userDeviceArray[i].platform.test(platform)) {
                return userDeviceArray[i].device;
            }
        }
        return 'Неизвестная платформа!' + platform;
    }
    
    console.log('Ваша платформа: ' + getPlatform());

    Если платформа не: Android, IOS, Symbian, то редирект
    Ответ написан
  • Как вынести настройки Swiftmailer из конфига?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Выносишь конфиг в отдельный файл куда тебе нужно:
    <?php
    return [
        'support' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'mailmail.ru',
                'username' => 'support@mail.ru',
                'password' => 'c',
                'port' => '465',
                'encryption' => 'ssl',
            ],
        ],
        'noReply' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'mail.mail.ru',
                'username' => 'noreply@mail.ru',
                'password' => '',
                'port' => '465',
                'encryption' => 'ssl',
            ],
        ],
    ];


    И в web.php
    $mailers = require __DIR__ . '/../components/mailer/config.php';
    'components'=> [
        ...
        'supportMailer' => $mailers['support'],
        'noreplyMailer' => $mailers['noReply'],
        ...
    ]


    Вызываешь:
    Yii::$app=>supportMailer ...
    Yii::$app=>noreplyMailer...
    Ответ написан
    Комментировать
  • Field 'title' doesn't have a default value. Почему?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    В базу ничего не будет записываться если нету правил в модели.
    Точнее если свойство не описано в правилах
    Опишите их:
    public function rules()
        {
            return [
                [['title'], 'string'],
            ];
        }
    Ответ написан
    Комментировать
  • Почему не работает автозагрузка в yii?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    namespace app\components;
    class Myclass
    {
    }

    use app\components\Myclass;
    $ob = new Myclass();
    Ответ написан
    Комментировать
  • Yii2 gridview есть ли плагин для перемещения столбцов?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Посмотри расширения от kartik может что найдешь полезного
    Ответ написан
    Комментировать
  • Не могу отправить форму yii?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Вам в форму HTML нужно вставить такой код:
    <input type="hidden" name="<?=Yii::$app->request->csrfParam; ?>" value="<?=Yii::$app->request->getCsrfToken(); ?>" />
    Ответ написан
    Комментировать
  • Как в yii2 поменять форматирование суммы в asCurrency?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Не знаю что там по документации, можешь просто эксплодить строку:
    $a = Yii::$app->formatter->asCurrency('1231231233');
            $a = explode(',', $a)[0];
            echo ($a); // 1 231 231 233

    Либо дописать функционал стандартного форматера как написал выше vilinyh
    Ответ написан
    Комментировать
  • Как отловить 503 ошибку php, yii2?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($http == 503) {
            die;
        }
    Ответ написан
    3 комментария
  • Как правильно построить правило ЧПУ в Yii2?

    cr1gger
    @cr1gger Автор вопроса
    Все дороги ведут в Рим — встретимся в Риме!
    Дебил! Удалите этот пост....
    Ошибка была в регулярках. Указал \d, а надо то \w
    Ответ написан
    Комментировать
  • Почему не работает LIMIT в датапровайдере через union запрос на Yii2?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    $query1->union($query2)->all();
    Ответ написан
  • Как сделать ЧПУ с регулярным выражением Yii?

    cr1gger
    @cr1gger Автор вопроса
    Все дороги ведут в Рим — встретимся в Риме!
    'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    [
                        'pattern' => 'news/<id:\d+>',
                        'route' => 'site/news',
                        'suffix' => '/'
                    ],
                    '<action>'=>'site/<action>',
                    
                ],
            ],
    Ответ написан
    Комментировать