Ответы пользователя по тегу Yii
  • Как создать ссылку на backend из frontend в Yii2?

    Что бы во 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 комментария
  • Не работает арабский язык в yii2, что делать?

    Я так понимаю проблема была в отсутствии раширения intl. Закройте вопрос т.к. он решен
    Ответ написан
    Комментировать
  • Yii2 как правильно создать сложные формы с зависимостями и валидировать их?

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

    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 комментария
  • Как сохранить атрибуты поисковой формы?

    На сколько мне известно из коробки подобного функционала нет.
    Вам остается только написать все самому используя cookies или localStorage.
    Ответ написан
    Комментировать
  • Почему модель не находит таблицу?


    Пробовал исправить на:
    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 комментария