Задать вопрос
Контакты
Местоположение
Россия, Нижегородская обл., Нижний Новгород

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (4)

Лучшие ответы пользователя

Все ответы (9)
  • Как создать ссылку на backend из frontend в Yii2?

    serieznyi
    @serieznyi
    Backend Developer
    Что бы во frontend иметь возможность формировать ссылки на контроллеры backend необходимо в frontend добавить новый UrlManager.

    В \yii2rbac\frontend\config\main.php добавьте следующий компонент
    'urlManagerBackend' => [
                'class' => 'yii\web\urlManager',
                'baseUrl' => 'http://yoursitedomain.ru',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => require(__DIR__ . '../backend/routes.php'),
            ],


    После это вы можете легко создавать ссылки на backend из frontend используя второй менеджер
    Yii::$app->urlManagerBackend->createUrl(['controller/action', 'parametr1' => 'value1']),


    Обратите внимание что правила роутинга я вынес в отдельный файл т.к. эти правила будут использоваться как в urlManager backend, так и в urlManagerBackend во frontend. Это избавляет нас от дублирования.

    Аналогичным образом вы сможете настроить формирование ссылок на frontend из backend.
    Ответ написан
    4 комментария
  • Почему модель не находит таблицу?

    serieznyi
    @serieznyi
    Backend Developer

    Пробовал исправить на:
    use Yii;
    use yii\base\Model;
    use yii\data\ActiveDataProvider;
    use frontend\models\Country;


    Это вы зря сделали. У вашей модели Country указан namespace app\models, а вы пытаетесь подключить ее из namespace frontend\models. Исправьте в CountrySearch строку
    use frontend\models\Country;
    на
    use app\models\Country;

    По поводу первоначальной ошибки.
    Вам нужно добавить в CountrySearch метод
    public function tableName()
    {
          return 'country';
    }


    Это связано с тем, что Yii2 при отсутствии этого метода в производном классе (CountrySearch), в качестве имени таблицы модели используется результат этого метода

    public static function tableName()
    {
            return '{{%' . Inflector::camel2id(StringHelper::basename(get_called_class()), '_') . '}}';
    }
    Ответ написан
    3 комментария
  • Yii2 как правильно создать сложные формы с зависимостями и валидировать их?

    serieznyi
    @serieznyi
    Backend Developer
    Это первое решение, которое пришло мне в голову. Поправьте, если в чем то ошибся.
    Данный код не проверялся на работоспособность, это только концепция.

    Controller
    class ControllerForm extends \yii\web\Controller
    {
        public function actionCreate()
        {
            $post = Yii::$app->request->post();
            $step = Yii::$app->request->post('step', 'step1');
            $model = ModelForm::model($step);
            $model->attributes = $post;
    
            if ($model->load($post) && $model->validate()) {
                if ($step === 'stepLast' && $model->save()) {
                    return $this->redirect(Url::toRoute(['index']));
                }
            }
    
            return $this->render('form', ['model' => $model]);
        }
    }


    Model
    class ModelForm extends ActiveRecord
    {
        public function rules()
        {
            return [
                [['field1', 'field2'], 'required', 'on' => 'step1'],
                [['field3'], 'required', 'on' => 'step2'],
                [['field1', 'field2', 'field3'], 'safe', 'on' => ['step1', 'step2', 'stepLast']]
            ];
        }
    }


    View
    $form = ActiveForm::begin([
        'layout' => 'horizontal',
    ]);
     echo $form->field($model, 'name', ['options' => ['class' => 'name '.$model->scenario]]);
    ActiveForm::end();


    Css
    .name.step1 {
         display: block;
    }
    
    .name.step2 {
         display: none;
    }


    UP1
    В документации Yii2 есть информация о использовании нескольких моделей на форме
    www.yiiframework.com/doc-2.0/guide-input-multiple-...
    Ответ написан
    3 комментария
  • Как удалить заголовок в REST модуле codeception?

    serieznyi
    @serieznyi
    Backend Developer
    Возможно так
    $I->deleteHeader('X-Requested-With');
    Ответ написан
    Комментировать
  • Как грамотно проанализировать?

    serieznyi
    @serieznyi
    Backend Developer
    У вас очень хаотичная логика.
    Я думаю вам будет проще в первую очередь привести текстовый код из $prog[0] к массиву элементов.
    То есть из
    program {var} begin end
    сделать вот это
    Array
    (
    [0] => {
    [1] => var 
    [2] => } 
    [3] => begin
    [4] => end
    )


    После чего вы можете спокойно пройтись циклом по вышеописанному массиву и найти все лексемы.

    $codeForParsing = "program {var} begin end";
    
    $codeAsArray = textToArray($textForParsing);
    
    $map = [];
    foreach(array_unique($codeAsArray) as $codeItem) {
          if (isset($map[$codeItem])) 
              continue;
    
         foreach($outp as $group => $groupItems) {
              if (($finded = array_search($codeItem, $groupItems)) !== false) {
                    $map[$codeItem] = [$group, $finded];
               }
         }
    }
    
    $result = [];
    foreach($codeAsArray as $codeItem) {
         $result[] = [$codeItem, $map[$codeItem][0], $map[$codeItem][1]];
    }


    В итоге вы получите массив вида
    [
    ['{', 'ogran', индексЛексемы]
    ['var', 'oper', индексЛексемы],
    ['}', 'ogran', индексЛексемы],
    ....
    ]


    который вы уже легко сможете привести к нужному виду
    Ответ написан
    2 комментария