Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Yii, Yii2
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
1

Несколько форм на одной странице Yii2

05.12.2017, 18:19. Просмотров 1069. Ответов 10
Метки нет (Все метки)

Я добавляю 4 формы на страницу. Но получаю ошибку "Call to a member function isAttributeRequired() on a non-object". Я так понимаю Yii не дает создавать больше одной формы на страницу? Или дело в чем-то другом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2017, 18:19
Ответы с готовыми решениями:

Не сохраняет несколько записей в бд Yii2
Я новичок и до конца не пойму как с виджетом yii2-multiple-input сохранить все...

Yii2. Соединение с разными базами данных. Errcode: 30 только при обращение к одной из них
Добрый день. Работаю с несколькими базами данных. В config/web.php прописаны...

Ошибка при установке Yii2-user with Yii2 advanced template
https://github.com/dektrium/yii2-user/blob/master/docs/usage-with-advanced-templ...

Простой многостраничный сайт на Yii2 без БД, есть ли быстрый старт для новичка в Yii2?
Привет! Решил смастерить сайт на Yii2, прочел вчера вводный раздел...

Список данных и форма редактирования на одной странице
Здравствуйте, Форумчане! В наличии zend framework 1.12 и такой вопрос: Есть...

10
FloppyDisc
Особый статус
598 / 203 / 157
Регистрация: 18.11.2015
Сообщений: 1,033
06.12.2017, 09:18 2
Конечно можно
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public actionTowForms(){
 
   $model1 = new Model1();
   $model2 = new Model2();
 
   if ($model->load(Yii::$app->request->post())) {
   // обработка первой модели
   }
   if ($model2->load(Yii::$app->request->post())) {
   // обработка второй модели
   }
 
   return $this->render('tow-forms',['model' => $model, 'model2' => $model2]); 
}
в view так же:
PHP
1
2
3
4
5
6
7
$form = ActiveForm::begin([])
<?= $form->field($model, 'firstField'); ?>
<?= $form->field($model, 'secondField'); ?>
 
$form2 = ActiveForm::begin([])
<?= $form2->field($model2, 'firstField'); ?>
<?= $form2->field($model2, 'secondField'); ?>
0
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
06.12.2017, 14:25  [ТС] 3
Цитата Сообщение от FloppyDisc Посмотреть сообщение
Конечно можно
Я так и делал, что и приводило к появлению ошибки в ActiveField. При чем, если убрать одну из форм, ошибка никуда не исчезает, и избавится от нее позволяет только создание нового проекта.
0
FloppyDisc
Особый статус
598 / 203 / 157
Регистрация: 18.11.2015
Сообщений: 1,033
06.12.2017, 15:14 4
Цитата Сообщение от neznayka Посмотреть сообщение
Я так и делал, что и приводило к появлению ошибки в ActiveField
Лучше опишите ошибку здесь

Я кстати забыл закрыть обе формы... И сабмиты тоже в каждой форме внутри ActiveForm
0
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
06.12.2017, 17:21  [ТС] 5
FloppyDisc,

Файл view/site/payers-management.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
 
/* @var $this yii\web\View */
use yii\helpers\Html;
use yii\widgets\ActiveForm;
 
 
$this->title = 'Управление плательщиками';
?>
<div class="site-index">
 
    <div class="body-content">
 
        <?php if (Yii::$app->session->hasFlash('success')) : ?>
          <?=  Yii::$app->session->getFlash('success'); ?>
        <?php endif; ?>
 
        <?php if (Yii::$app->session->hasFlash('error')) : ?>
          <?=  Yii::$app->session->getFlash('error'); ?>
        <?php endif; ?>
 
        <div class="row">
 
            <div class="col-lg-4">
                <h2>Загрузить из таблицы EXCEL</h2>
 
                <div class="container">
                  <h3>Загрузить физические лица</h3>
 
                  <?php $form = ActiveForm::begin([
                    'id' => 'upload-natural-person',
                    'options' => ['enctype' => 'multipart/form-data']]) ?>
 
                  <?= $form->field($model, 'userFile')->fileInput() ?>
 
                  <div class="form-group">
                    <?= Html::submitButton('Загрузить', ['class' => 'btn btn-primary', 'name' => 'upload-natural-person']) ?>
                  </div>
 
                  <?php ActiveForm::end(); ?>
 
                </div>
                <div class="container">
                  <h3>Загрузить юридические лица</h3>
 
 
 
                </div>
            </div>
 
            <div class="col-lg-4">
                <h2>Добавить физическое лицо</h2>
 
                <?php $form = ActiveForm::begin(['id' => 'create-natural-person']); ?>
 
                  <?= $form->field($model1, 'ls')->textInput(['autofocus' => true]) ?>
 
                  <?= $form->field($model1, 'username')->textInput() ?>
 
                  <?= $form->field($model1, 'email')->input('email') ?>
 
                  <?= $form->field($model1, 'fname')->textInput() ?>
 
                  <?= $form->field($model1, 'lname')->textInput() ?>
 
                  <?= $form->field($model1, 'mname')->textInput() ?>
 
                  <?= $form->field($model1, 'address')->textInput() ?>
 
                  <div class="form-group">
                      <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'create-natural-person']) ?>
                  </div>
 
                <?php ActiveForm::end(); ?>
 
            </div>
            <div class="col-lg-4">
                <h2>Добавить юридическое лицо</h2>
 
 
            </div>
        </div>
 
    </div>
</div>


Файл SiteController.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace backend\controllers;
 
use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use backend\models\SetPasswordForm;
use backend\models\UploadNaturalPersonForm;
use backend\models\CreateNaturalPersonForm;
 
use yii\web\ForbiddenHttpException;
 
********************************************
********************************************
 
public function actionPayersManagement() {
 
        $model = new UploadNaturalPersonForm();
        $model1 = new CreateNaturalPersonForm();
 
        return $this->render('payers-management', compact($model, $model1));
}


Файл backend/models/UploadNaturalPersonForm.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace backend\models;
 
use Yii;
use yii\base\Model;
use yii\web\UploadedFile;
 
class UploadNaturalPersonForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $userFile;
 
    public function rules()
    {
        return [
            [['userFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xls, xlsx'],
            [['userFile'], 'required'],
        ];
    }
 
    public function upload()
    {
        if ($this->validate()) {
            $this->userFile->saveAs('uploads/' . $this->userFile->baseName . '.' . $this->userFile->extension);
            return true;
        } else {
            return false;
        }
    }
}


Файл backend/models/CreateNaturalPersonForm.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use Yii;
use yii\base\Model;
 
class CreateNaturalPersonForm extends Model
{
  public $ls;
  public $username;
  public $email;
  public $fname;
  public $lname;
  public $mname;
  public $address;
 
  public function rules()
  {
      return [
          // username and password are both required
          [['ls', 'username', 'email', 'fname', 'lname', 'mname', 'address'], 'required'],
      ];
  }
 
}


На данный момент они такие. Может я какие обязательные функции не описал?
Получаю ошибку:

PHP Fatal Error – yii\base\ErrorException
Call to a member function isAttributeRequired() on a non-object
in C:\OpenServer\domains\localhost\vendor\yiisoft\yii2\widgets\ActiveField.php
0
FloppyDisc
Особый статус
598 / 203 / 157
Регистрация: 18.11.2015
Сообщений: 1,033
06.12.2017, 17:37 6
Проверьте модели, что там внутри var_dump($model);
0
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
06.12.2017, 18:39  [ТС] 7
FloppyDisc,

$model
Кликните здесь для просмотра всего текста
object(backend\models\UploadNaturalPersonForm)#101 (6) { ["userFile"]=> NULL ["_errors":"yii\base\Model"rivate]=> NULL ["_validators":"yii\base\Model"rivate]=> NULL ["_scenario":"yii\base\Model"rivate]=> string(7) "default" ["_events":"yii\base\Component"rivate]=> array(0) { } ["_behaviors":"yii\base\Component"rivate]=> NULL }


$model1
Кликните здесь для просмотра всего текста
object(backend\models\CreateNaturalPersonForm)#114 (12) { ["ls"]=> NULL ["username"]=> NULL ["email"]=> NULL ["fname"]=> NULL ["lname"]=> NULL ["mname"]=> NULL ["address"]=> NULL ["_errors":"yii\base\Model"rivate]=> NULL ["_validators":"yii\base\Model"rivate]=> NULL ["_scenario":"yii\base\Model"rivate]=> string(7) "default" ["_events":"yii\base\Component"rivate]=> array(0) { } ["_behaviors":"yii\base\Component"rivate]=> NULL }
0
FloppyDisc
Особый статус
598 / 203 / 157
Регистрация: 18.11.2015
Сообщений: 1,033
06.12.2017, 19:06 8
Окей, пересмотрел ваши наброски
1. Вы не принимаете запросы в контроллере, я выше описал как
2. Удалите public $ls;
public $username;
public $email;
public $fname;
public $lname;
public $mname;
public $address;

3. После всего этого попробуйте var_dump(Yii::$app->request->post()):
4. А в чем собственно смысл CreateNaturalPersonForm, что он вообще должен делать по вашему? В общем отшлифуйте ошибки выше и разберитесь с моделями
0
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
06.12.2017, 19:18  [ТС] 9
FloppyDisc,

1. Я принимал запросы. Как я ответил выше на ваше сообщение, у меня было написано тоже самое, пока не вылезла эта ошибка и я начал искать в чем проблема.

2. Что даст удаление этих полей?

3. Yii::$app->request->post() пустой, т.к. не доходит до отображения страницы с формами, и соответственно я не могу отправить запрос.

4. CreateNaturalPersonForm должен принимать данные из соответствующей формы.
0
FloppyDisc
Особый статус
598 / 203 / 157
Регистрация: 18.11.2015
Сообщений: 1,033
06.12.2017, 19:48 10
Попробуйте
PHP
1
return $this->render('payers-management', ['model' => $model, 'model1' => $model1]);
или так:
PHP
1
return $this->render('payers-management', compact('model','model1'));
0
neznayka
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 48
06.12.2017, 22:04  [ТС] 11
FloppyDisc, второй вариант сработал. Спасибо.
0
06.12.2017, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2017, 22:04

Несколько классов в одной модели
Не подскажете, есть ли возможность в одной модели создать несколько разных...

Несколько изображений к одной новости без перезагрузки страницы YII
Использую yii. Есть форма создания новости, задача - пользователь загружает...

Несколько форм на одной странице
Здравствуйте! Типа страницу регистрации, в которой есть две разные формы(для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru