Доброго времени суток. Буквально только что разобрался с Pjax-ом, но теперь есть задача посложнее. Сейчас пробую реализовать регистрацию через Pjax, регистрация из 3 етапов, и у каждой есть своя страница с урлом и методом в контроллере.
Контоллер:
public function actionFirststep(){
if ($registrationForm->load(Yii::$app->request->post())) {
return $this->redirect(['/usercabinet/registration/secondstep']);
}
return $this->render('index', ['model' => $registrationForm]);
}
public function actionSecondstep(){
if ($registrationForm->load(Yii::$app->request->post())) {
return $this->redirect(['/usercabinet/registration/success']);
}
return $this->render('secondStep', ['model' => $registrationForm]);
}
public function actionSucces(){
return $this->render('success');
}
Реально ли сделать такое Pjax-ом? Именно переход с первого етапа на второй(Со второго етапа на successs сложностей не возникает).
Вариант с несколькими действиями и контроллерами неверен.
В одном ActiveForm можно обработать несколько моделей. Выглядит это так.
// Контроллер
public function actionCreate()
{
$user = new User();
$profile = new Profile();
// тут обработка и запись в базу данных в разные таблицы.
if($user->load(Yii::$app->post()) && $profile->load(Yii::$app->post())){
$validData = $user->validate();
$validData = $profile->validate() && $validData;
if($validData){
$user->save(false);
$profile->save(false);
return $this->redirect('success');
}
}
// подключение представления с формой.
return $this->render('create', ['user' => $user, 'profile' => $profile);
}
В самом представлении с формой делаете так.
$form = ActiveForm::begin();
echo $form->field('user', 'username')->textInput();
echo $form->field('profile', 'address')->textInput();
ActiveForm::end();
Точно так же при обновлении записи. Две модели передаёте в этот же вид. Отправляете при помощи ajax(pjax).
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости