Задать вопрос
  • Docker + Wireguard. В чём причина ssl timeout?

    slo_nik
    @slo_nik Автор вопроса
    Как подсказал ValdikSS проблема была в значении mtu.

    На локальном docker + wireguard
    Значение для wireguard оставляем без изменений - mtu 1420

    На сервере увеличиваем значение mtu для wireguard до 1500

    UPD.

    Второй вариант решения проблемы.

    На сервере ничего не меняем в настройках wireguard, значение mtu оставляем по умолчанию - 1420.

    На локальном:

    В корень проекта добавляем файл docker-compose.override.yml, в файле пишем

    version: "3"
    networks:
      default:
         driver: bridge
         driver_opts:
            com.docker.network.driver.mtu: 1420


    В директории /etc/docker создаём файл daemon.json, в файле прописываем значение mtu равным значению mtu для wireguard.

    {
       "mtu": 1420
    }


    В завершении выполняем команду

    systemctl restart docker

    Файл docker-compose.override.yml убирает первую ошибку "SSL connection timeout".
    Файл daemon.yml убирает вторую ошибку, зависание при загрузке пакетов.
    Ответ написан
    6 комментариев
  • Что вызывает permission denied?

    slo_nik
    @slo_nik Автор вопроса
    Для решения проблемы достаточно добавить в команду запуска флаг --user

    docker-compose run --rm --user node poisk-node-cli npx create-react-app react-app --template cra-template-pwa
    Ответ написан
    Комментировать
  • Как передать URL в javascript?

    slo_nik
    @slo_nik Куратор тега PHP
    <?php
    $material_id = 4;
    $link_id = 16;
    ?>
    <script>
    url: '/materials/' <?= $material_id ?>'/link/' <?= $link_id ?>,
    </script>
    Ответ написан
    Комментировать
  • Можно ли написать универсальный обработчик формы ajax+php?

    slo_nik
    @slo_nik Куратор тега PHP
    Вот Вам примитивнейший пример.
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    	<title>Document</title>
    </head>
    <body>
    	<div>
    		<form action="">
    		   <input type="text" name="name">
    		   <input type="text" name="phone">
    		   <input type="hidden" name="first" value="first">
    		   <input type="submit" name="first">
    		</form>		
    	</div>
    	<div>
    		<form action="">
    			<input type="text" name="name">
    			<input type="text" name="email">
    			<input type="hidden" name="second" value="second">
    			<input type="submit" name="second">
    		</form>		
    	</div> 
    	<div>
    		<form action="">
    			<input type="text" name="name">
    			<textarea name="textarea"></textarea>
                <input type="hidden" name="third" value="third">
    			<input type="submit" name="third">
    		</form>		
    	</div>	
    <script type="text/javascript">
    	$(document).ready(function(){
    		$("form").on("submit", function(e){
    			e.preventDefault()
    			var data = $(this).serialize()
    			$.ajax({
    				url: 'ajax.php',
    				method: 'POST',
    				data: data,
    				success: function(response){
    					console.log(response)
    					var answer = jQuery.parseJSON(response);
    					if(answer.type === 'success'){
    						alert(answer.text)
    					}
    					if(answer.type === 'error'){
    						alert(answer.text)
    					}
    				} 
    			}) 
    		})
    	})
    </script>	
    </body>
    </html>


    <?php
      if(isset($_POST)){
    
      	if(isset($_POST['first'])){
      		if(!empty($_POST['name'])){
      			$answer = ['type' => 'success', 'text' => 'Отправлена форма First'];
      		}else{
      			$answer = ['type' => 'error', 'text' => 'Заполните поле "name" в форме First'];
      		}	
      	}
      	if(isset($_POST['second'])){
      		$answer = ['type' => 'success', 'text' => 'Отправлена форма Second'];
      	}
      	if(isset($_POST['third'])){
      		$answer = ['type' => 'success', 'text' => 'Отправлена форма Third'];
      	} 
      	echo json_encode($answer);
      }
    ?>
    Ответ написан
    Комментировать
  • Как передать объект из контроллера в head?

    slo_nik
    @slo_nik Куратор тега Yii
    Доброе утро.
    В контроллере создаёте свойство, присваиваете ему нужное значение.
    class DefaultController extends Controller
    {
        public $test;
    
        public function actionIndex()
        {
             $this->test = 'test';
             /* остальной код метода */
        }
    }

    В main.php вызываете приблизительно так
    <?= Yii::$app->controller->view->context->test ?>
    Ответ написан
    6 комментариев
  • Как настроить yii2 advanced на ubuntu?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    RootDirectory настраиваете на корень сайта, не на backend/web и не на frontend/web
    В корне сайта .htaccess
    RewriteEngine On
    
    RewriteRule ^(frontend|backend)/web/ - [L]
    
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^admin(\/?.*)$ backend/web/$1 [L]
     
    RewriteCond %{REQUEST_URI} ^/
    RewriteRule ^(\/?.*)$ frontend/web/$1 [L]

    В backend/web .htaccess
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php

    В backend/config/main.php, в секцию request
    'baseUrl' => '/admin'

    Перейдя по адресу http://site.com попадёте на frontend, а по адресу http://site.com/admin - в админку.
    Теперь, если захотите перенести сайт в поддиректорию, например subsite, адрес изменится на http://site.com/subsite.
    Вносите изменения в .htaccess, который в корне сайта.
    RewriteEngine On
    
    RewriteRule ^(frontend|backend)/web/ - [L]
    
    RewriteCond %{REQUEST_URI} ^/(subsite/admin)
    RewriteRule ^admin(/.*)?$ backend/web/$1 [L]
    
    RewriteCond %{REQUEST_URI} ^/(subsite)
    RewriteRule ^(.*)$ frontend/web/$1 [L]

    В backend/config/main.php добавляете переменную $baseUrl
    $baseUrl = str_replace('/backend/web', '', (new yii\web\Request)->getBaseUrl());

    и подставляете в значение baseUrl
    'baseUrl' => $baseUrl . '/admin'
    В этом случае Вы не заморачиваетсь с названием поддиректории в которую перенесёте сайт, названия можете менять как угодно, но не забываете сменить название и в корневом .htaccess
    Ответ написан
    Комментировать
  • Как правильно составить правило для url?

    slo_nik
    @slo_nik Куратор тега Yii
    'default/<id:\d+>/brand-<brand:\d+>' => 'default/index',
    'default/<id:\d+>' => 'default/index',
    'default' => 'default/index',
    
    echo Html::a('test', ['default/index', 'id' => $id, 'brand' =>  $brand])
    echo Html::a('test', ['default/index', 'id' => $id])
    echo Html::a('test', ['default/index'])
    
    http://site.loc/default/index/3/brand-2
    http://site.loc/default/index/3
    http://site.loc/default/
    Ответ написан
    Комментировать
  • Почему не отправляется форма в базу данных?

    slo_nik
    @slo_nik Куратор тега PHP
    Я спрашиваю как изменить

    Владимир Майструк, Вам указали на ошибки.
    Ваши действия:
    1) Доработать js код, чтобы от отправлял данные. Читайте, смотрите в инете примеры. В обработчике формы для этого шага выводите просто дамп массива $_POST. Как только это заработаете - переходите к исправлению обработчика формы.
    2) Читать, смотреть в официальной документации php, в инете примеры как обработать данные формы на сервере. Добиваетесь, чтобы на сервере инициализировались данные из формы.
    3) Читать смотреть в официальной документации php, смотреть примеры в инете как работать с mysql. Добиться того, чтобы данные записывались в базу.
    Помимо этого читайте, смотрите в инете как обрабатываются ошибки при работе js, php и mysql.
    Всё. Элементарный скрипт отправки формы Вы сможете написать уже к вечеру.

    p.s. Если всё-таки не будет получаться написать самостоятельно, то в этом случае показываете свой код, пишите ошибки, которые возникают и описываете действия которые Вы делали для устранения ошибок. Тогда у всех админов, модераторов, кураторов и обычных пользователей текут слёзы умиления и все, перебивая друг друга, кинуться Вам помогать)))
    Ответ написан
    Комментировать
  • Как прикрепить несколько файлов к письму через PHPmailer?

    slo_nik
    @slo_nik Куратор тега PHP
    Доброе утро.
    Вы получаете первый элемент массива, а остальные пропускаете.
    if (!empty($file['name'][0])) {
    Оберните это в цикл
    if (!empty($file['name'][$k])) {
    Ответ написан
  • Почему не срабатывает loadMultiple для модели?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Замените
    SkillsChecked::loadMultiple($sk_ch, Yii::$app->request->post(), '')

    на
    Model::loadMultiple($sk_ch, Yii::$app->request->post())

    И ещё, у Вас нет никаких $settings)))
    Замените
    SkillsChecked::validateMultiple($settings))
    на
    Model::validateMultiple($sk_ch))
    Ответ написан
    Комментировать
  • Как в renderAjax определить текущий язык?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Получить можно из cookies.
    Ответ написан
    Комментировать
  • В чем моя ошибка с миграциями?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Для advanced укажите путь к миграциям --migrationPath="@frontend/migrations".
    Чтобы не указывать путь - помещайте миграции в предназначенную для этого директорию(если не ошибаюсь - console/migrations для advanced).
    И зачем через gii генерировать миграции, если для этого есть специальная консольная команда
    php yii migrate/create migrate_name? Если делать миграции при помощи этой команды, то файлы будут складываться куда положено.

    p.s. Через gii не создают миграции)))
    Ответ написан
    Комментировать
  • Как в yii2 поменять форматирование суммы в asCurrency?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    В документации честно не нашел)

    Плохо искали.
    Yii::$app->formatter->asCurrency('10650000', 'RUB', [NumberFormatter::FRACTION_DIGITS => 0])

    Должно быть установлен php-intl
    Подробней.
    Ответ написан
    Комментировать
  • Yii2. Как сохранить дату в БД в формате Unix?

    slo_nik
    @slo_nik Куратор тега Yii
    Если дата приходит в виде 2020-06-12 14:45, то в правилах валидации можно написать так.
    ['publish_at', 'datetime', 'timestampAttribute' => 'publish_at', 'format' => 'php:Y-m-d H:i'],

    На примере валидации формы контактов.
    public function contact($email)
        {
            echo $this->publish_at; // 2020-06-12 14:45.
            if ($this->validate()) {
                echo $this->publish_at;  // 1591962300
                exit();
            }
            return false;
        }
    Ответ написан
    Комментировать
  • Ссылка в столбце GridView?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    [
    'template' => '{view}',
    'buttons' => [
        'view' => function($url, $model, $key){
           return Html::a($model->title, $url)
        }
      ]
    ]

    Сверьтесь с документацией.
    https://www.yiiframework.com/doc/api/2.0/yii-grid-....
    Ещё можно сделать переход по ссылке прямо из столбца title.
    [
       'attribute' => 'title',
       'value' => function($model){
           return Html::a($model->title, ['controller/action', 'id' => $model->id])
        }
    ]
    Ответ написан
  • Как в зависимости от ответа сервера изменить иконку c помощью ajax?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Вот Вам упрощённый способ на примере смена статуса. В колонке таблицы всё те же span.
    // GirdView column
    [
        'attribute' => 'status',
        'contentOptions' => function($model, $key, $index, $column){
             return [
                 'class' => 'status-column',
                 'style' => 'cursor:pointer',
                 'id' => $key,
                 'onclick' => '
                        $.ajax({
                           url: "' . Url::toRoute('/ajax/update-status-mark') . '",
                           method: "POST",
                           data: {id: ' . $key . ', status: ' . $model->status . '},
                           success: function(data){
                              if(data == 0){
                                 $("td#' . $key . ' span").removeClass("label-success").addClass("label label-danger").text("Blocked")
                                 $("tr[data-key=' . $key . ']").removeAttr("style")
                              }
                              else{
                                 $("td#' . $key . ' span").removeClass("label-danger").addClass("label label-success").text("Active")
                                 $("tr[data-key=' . $key . ']").css("backgroundColor","rgb(226, 243, 227)")
                              }
                           }
                        })
                    '
             ];
         },
    ]
    
    // Controller action
    public function actionUpdateStatusMark($id)
    {
        $model = $this->findModel($id);
        $model->status = $model->status == 0 ? 1 : 0;
        $model->save(false,['status']);
        return $model->status;
    }
    Ответ написан
    3 комментария
  • Как установить curl на ubuntu?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Устанавливаете aptitude.
    В консоли выполняете команду
    aptitude search curl
    В результатах поиска увидите что-то подобное
    i A php-curl                                               - CURL module for PHP [default]                                   
    v   php-curl:i386                                          -                                                                 
    p   php5.6-curl                                            - CURL module for PHP                                             
    p   php5.6-curl:i386                                       - CURL module for PHP                                             
    p   php7.0-curl                                            - CURL module for PHP                                             
    p   php7.0-curl:i386                                       - CURL module for PHP                                             
    p   php7.1-curl                                            - CURL module for PHP                                             
    p   php7.1-curl:i386                                       - CURL module for PHP                                             
    i A php7.2-curl                                            - CURL module for PHP                                             
    p   php7.2-curl:i386                                       - CURL module for PHP                                             
    p   php7.3-curl                                            - CURL module for PHP                                             
    p   php7.3-curl:i386                                       - CURL module for PHP                                             
    i   php7.4-curl                                            - CURL module for PHP                                             
    p   php7.4-curl:i386

    Устанавливаете нужную версию
    sudo apt-get install php7.4-curl
    Перезагружаете apache и радуетесь)))
    Ответ написан
    Комментировать
  • Как в yii2 вывести js скрипт перед закрывающим тегом?

    slo_nik
    @slo_nik Куратор тега Yii
    Думаю, что весь этот цирк с отловом значения через Ваш скрипт лишний.
    Всё гораздо проще.
    echo ColorPicker::widget([
       'name' => 'Test',
       'value' => '#CCCCCC',
       'options' => [
           'onchange' => '
                 console.log($(this).val())
                // ВОТ ТУТ ДЕЛАЙТЕ ЧТО ХОТИТЕ, ХОТЬ ПО AJAX ОТПРАВЛЯЙТЕ, ХОТЬ КУДА ПРИСВАИВАЙТЕ.
            '
       ]
    ]);

    Так что писать скрипт, который будет отлавливать значения виджета лишняя работа.
    Написали бы сразу в вопросе как положено - не потребовалось бы морочить голову в комментариях.
    Ответ написан
  • Как создавать многоступенчатые запросы?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Во-первых, можно использовать andFilterWhere().
    C условиями можно разбить запрос на части.
    $request = Model::find();
    if(...){
      $request->andWhere(...);
    }
    $query = $request->all(); // or one()
    Ответ написан
    2 комментария