Ответы пользователя по тегу Yii
  • Как запустить сайт на yii2 локально?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Есть официальная документация по yii2.

    Если вы устанавливали advanced версию, то не забудьте запустить init script в корне проекта в терминале.

    Ну и конфиги описанные Вами - это конфиги фрэймворка, а не докера. (ну, мало ли, вдруг Вы перепутали)
    Ответ написан
  • Всё таки как же по человечески настроить ЧПУ на yii2?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    1. Нужно взять apache или nginx конфиг отсюда (в конце страницы).
    2. В конфиге веб приложения включить pretty urls, например, так:
    'components' => [
        // ...
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            // Hide index.php
            'showScriptName' => false,
            // Use pretty URLs
            'enablePrettyUrl' => true,
            'rules' => [
            ],
        ],
        // ...
    ],


    Внутри rules можно указывать правила (например, регулярные выражения, по которым должен срабатывать иной action, или, к примеру, может быть иной alias.

    Вот хорошая статья по теме, откуда и взят пример.
    Ответ написан
    Комментировать
  • YII как сделать наследование CRUD операции от базового контроллера? Как использовать?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Я что-то не понимаю, наверное, но ведь это классика - создать модель, где будут нужные методы, и использовать их в контроллере. Т.е. все CRUD операции держать в отдельном классе, которые будут в models, подключать этот класс в нужных контроллерах и использовать методы там (обращаясь к ним статически)

    Пример:

    в frontend/models создаете файл Crud.php:

    namespace frontend\models;
    
    Class Crud extends Model {
        public static function getData() {
            return ... // тут какие-нибудь вычисления или берем что-то из БД и т.п.
        }
    }


    После в любом контроллере подключаете эту модель:
    use frontend\models\Crud;

    И используете:
    $some_res = Crud::getData();
    Ответ написан
  • Yii Как в Rest API сделать аутентификацию из backend или frontend?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Я не смотрел видео, но проверить залогинен ли пользователь можно так:
    if(!Yii::$app->user->isGuest) {
    ...
    }


    Если нужно узнать кто именно залогинен, то делается это так:
    if (Yii::$app->user->identity->id == 'username') {
    ...
    }


    Т.е. в контроллере можно проверить, залогинен ли пользователь и кто именно (есть ли у него права на API), если нет - проверять токен.
    Ответ написан
  • Как решить проблему с Composer (PHP)?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Это винда, в этом случае советовать сложно. Но, исходя из посыпавшихся ошибок, попробуйте установить\настроить:

    1. OpenSSL и php-openssl
    2. php-mcrypt
    3. git
    Ответ написан
    Комментировать
  • Как отправлять данные методом ajax в модальном окне на yii2?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Для ajax валидации:

    1. В ActiveForm::begin() нужно добавить 'enableAjaxValidation' => true во view,

    2. В контроллере добавить конструкцию для ajax валидации:
    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request>post())) {  // если получаем AJAX и POST запрос
          return ActiveForm::validate($model); // выполняем валидацию формы 
       }


    Для ajax отправки:

    3. Для отправки формы через ajax я всегда пишу свои js скрипты, где я делаю для кнопки preventDefault(), собираю данные из формы и отправляю ajax запросом, - тут главное кроме всех данных формы собрать и __csrf-token и передать его в запросе, иначе бэкэнд просто выбросит запрос как невалидный и не обработает его.

    Для popup закртыия:

    4. Закрыть popup легко, я так понимаю, Вы будете использовать бутстраповский. Т.е. код клика по сабмит кнопке должен быть примерно такой:
    $('.submit-button).click(function(e){
       e.preventDefault();
       // отправка аякса и потом:
       $('#popupselector').modal('hide');
    });
    Ответ написан
    3 комментария
  • Yii2 OAuth в Twitter?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Есть готовое расширение, использующее yii2 oauth для социальных сетей. Т.е. можно использовать его, вместо собственного велосипеда.
    Ответ написан
    Комментировать
  • Как использовать одну форму для создания и редактирования юзера?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Просто берешь и используешь одну и ту же форму.

    Внутри файла с моделью формы делаешь два разных метода, один для регистрации, другой для обновления\редактирования. Соответственно, вызываешь в контроллере разные методы при разных действиях.

    Или речь про view файл?
    тут можно добавить две разных формы одной модели и это будет работать.
    Или же добавить один hiddenInput, где будет значение действия, которое можно менять джаваскриптом, исходя из значения, - делать что-то на бэкэнде.

    Такие вот дела.
    Ответ написан
    Комментировать
  • Как осуществляется работа с консолью средствами php?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    exec() - выполняет команду на сервере и все.
    shell_exec() - выполняет команду и возвращает консольный вывод.
    большие задачи лучше выносить в bash скрипты. Если нужен root - выполнять их с sudo.
    Лучше сделать какую-нибудь "песочницу" для этих скриптов, ограничив их в возможностях, например с помощью chroot jail
    Ответ написан
    1 комментарий
  • Как в yii2 во view вывести на экран данные, только если они есть?

    butteff
    @butteff Автор вопроса
    Раз в тысячу лет заправляю свитер в носки
    проблема была в short_open_tags. Спасибо Всем за помощь
    Ответ написан
    Комментировать
  • Yii узнать id textfield?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Узнать на фронтенде можно в Вашем случае с помощью jquery какого-нибудь.
    На бэкэнде никак, ведь Вы информацию по id не передали в форме.
    Надо имена задавать примерно так:
    $id = rows[$i]['name'];
    echo CHtml::textField('elem[$id][]','',array('id'=>$id));
    Ответ написан
  • Yii съезжает кнопка?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Сделайте кнопку другим путем:
    Html::submitButton('Добавить шаблон', ['class' => 'btn btn-primary']);


    Не забудьте подключить нэймспэйсы:
    use yii\helpers\Html;

    Если нужно по каким-то соображениям именно TbButton этот Ваш, то просто посмотрите в фаербаге, какие стили ползут, измените css и пропишите его.
    Ответ написан
  • Yii как динамически менять валидацию?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Напишите свое правило валидации, примерно так:

    public function rules() {
    	return [
    		['input', 'required'],
    		['input', function($attribute, $params) {
    			if (is_integer($this->$attribute)) {
     				//если число
     				if ($this->attribute < 10) {
     					return $this->addError($attribute, 'Число должно быть больше 10');
     				}
    			}
    
    			if (is_string($this->$attribute)) {
    				//ecли строка
    			}			
    	}],
    ];
    }
    Ответ написан
    Комментировать
  • Как сделать автосохранение Ajax Yii2?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Вам надо создать объект наследуемого класса ActiveRecord и с ним работать для сохранения данных. Вы же работаете с моделью формы, принимаете ее данные и пытаетесь сохранить их тут:
    $model->save();
    но на что Вы надееетесь, если это модель формы (Model), а с БД работают модели класса ActiveRecord и только? До этого надо еще в БД таблицу создать. И в конфиге соединение с БД настроить и подключить.

    Вот статья в документации по теме, после которой Вы сможете, я надеюсь, данные из формы обработать и сохранить.

    Но сохранить их без перезагрузки чтобы, просто автоматически при наборе с помощью ajax, как Вы хотели в Вашем прошлом забаненом вопросе, Вам надо понимать, что мой пример из прошлого Вашего вопроса делает, но Ваш багаж знаний для этого недостаточен.

    Вам надо почитать про javascript, ajax, jquery, выучить это всё и почитать документацию к yii. А затем уже делать. Вероятно, Вы и с php мало знакомы, тогда надо почитать и мануал с php.net

    Успехов.
    Ответ написан
  • Где yii2 хранит mail логи, что проверить еще, если почта работала, но отвалилась?

    butteff
    @butteff Автор вопроса
    Раз в тысячу лет заправляю свитер в носки
    В общем, отбой. Проблема в том, что на хостинге ограничено количество писем в день.
    А так, если по теме, то можно в конфиге указать filetransfer в mailer, как true и тогда письма будут писаться в файлы в папке runtime/mailer/
    Ответ написан
    Комментировать
  • Yii: правильно ли так работать с моделями, вопросы безопасности?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Если в модели Вы прописываете rules() для валидации полученных данных, то в теории там иных данных быть не должно, только прошедшие валидацию. Поэтому это вполне безопасно, но зависит от Ваших прописанных правил.
    Ответ написан
    Комментировать
  • Как убрать captcha yii2 из CRUD?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Ну можно ее просто удалить. Зачем капча, если ее не проверять?
    А так, все методы и опции есть в документации. Еще можно, наверное, сделать капчу необязательным параметром, но не уверен. Просто в rules() в модели формы, убрать captcha из required - может сработает
    Ответ написан
    Комментировать
  • Почему SimpleXML вставляет в бд только первую запись из XML файла?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Когда Вы создаете новый объект - Вы создаете новую запись.
    т.е. $articleForImport = new Articles(); означает, что Вы создаете одну запись в БД. Циклом Вы его перезаписываете. Один и тот же объект (запись). Мне кажется, надо попробовать инициализировать этот объект внутри цикла foreach. Тогда с казждой итерацией цикла будет новая запись в БД.
    Ответ написан
    1 комментарий
  • Yii2 ActiveRecord - как создать связь через две таблицы?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Я не совсем понял вопрос.
    Что мешает сделать выборку из a?

    use \app\model\a; //a - это наследуемый класс от activeRecord
    use \app\model\b; // b - тоже
    
    $id = 21 // известная величина, к примеру, b_id
    
    $bdb = b::findOne(['b_id' => $id]);
    $adb = a::findOne(['id' => $bdb->id]);
    echo $adb->name

    Вот статья из документации по работе с БД в yii2
    Ответ написан
    Комментировать
  • Как в yii сформировать url в ajax?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Я делаю так в yii2:

    $('#user-profile').on('beforeSubmit', function(){
        var url = $('#user-profile').attr('action');
        var data = $('#user-profile').serialize();
        $.ajax({
        	type: "POST",
          	url: url,
          	data: data,
          	success:function(data) {
          		if (typeof(data)!='undefined' && data !='') {
          			alert(data);
          		}	
          	}
        });
    });


    ну В вашем случае надо заменить селекторы на свои и метод get, а не post
    Ответ написан
    Комментировать