Ошибка преобразования объекта модели в строку

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

public function actionIndex()
    {
       $model =  ProfileForm::GetWithUser(Yii::$app->user->identity->id);

        return $this->render('index', [
            'model' => $model,
        ]);
    }

После чего принимаю их во view и при передаче объекта $model в $form->field. Выдаёт ошибку преобразования объекта в строку.

 <?php

/** @var yii\web\View $this */
/** @var \frontend\models\ProfileForm $model */

$this->title = 'My Yii Application';
?>
<div class="site-index">

    <?php 
    if (Yii::$app->user->isGuest) { 
   echo ' 
                <p>Вы не авторизованы( Сделайте что-нибудь с этим</p>
                ';
    } else {
        var_dump($model); 
        
       echo `
       <h1><?= Html::encode($this->title) ?></h1>

        <p>Please fill out the following fields to login:</p>

        <div class="row">
            <div class="col-lg-5">
                <?php $form = ActiveForm::begin(['id' => 'profile-form']); ?>
                
                    <?= $form->field($model, 'first_name')->textInput(['autofocus' => true]) ?>
                    
                    <?= $form->field($model, 'last_name')->textInput() ?>
                    
                    <button class="btn btn-lg btn-primary" type="submit">OK</button>
                <?php ActiveForm::end(); ?>

            </div>
        </div> `;
    }
    
    
    ?>
    </div>
</div>

Ошибка:

    2024-02-11 22:02:22 [127.0.0.1][19][s4fbag0p29c13uqv0pejjv9re8shnefh][error][yii\base\ErrorException:4096] yii\base\ErrorException: Object of class frontend\models\SignupForm could not be converted to string in F:\programs\OSPanel\domains\test-assigment-infa\advanced\frontend\views\site\index.php:27
Stack trace:
#0 F:\programs\OSPanel\domains\test-assigment-infa\advanced\frontend\views\site\index.php(27): yii\base\ErrorHandler->handleError(4096, 'Object of class...', 'F:\\programs\\OSP...', 27, Array)
#1 F:\programs\OSPanel\domains\test-assigment-infa\advanced\vendor\yiisoft\yii2\base\View.php(347): require('F:\\programs\\OSP...')
#2 F:\programs\OSPanel\domains\test-assigment-infa\advanced\vendor\yiisoft\yii2\base\View.php(257): yii\base\View->renderPhpFile('F:\\programs\\OSP...', Array)
#3 F:\programs\OSPanel\domains\test-assigment-infa\advanced\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('F:\\programs\\OSP...', Array, Object(frontend\controllers\SiteController))
#4 F:\programs\OSPanel\domains\test-assigment-infa\advanced\vendor\yiisoft\yii2\base\Controller.php(407): yii\base\View->render('index', Array, Object(frontend\controllers\SiteController))
#5 F:\programs\OSPanel\domains\test-assigment-infa\advanced\frontend\controllers\SiteController.php(84): yii\base\Controller->render('index', Array)
#6 [internal function]: frontend\controllers\SiteController->actionIndex()

До этого делал формы регистрации и авторизации, всё теми же шагами, но там всё работает корректно.

Класс ProfileFrom

<?php

namespace frontend\models;

use Yii;
use yii\base\Model;
use common\models\User;

/**
 * Profile form
 */
class ProfileForm extends Model
{
    public $first_name;
    public $last_name;
    public $email;
    public $password; 
    public $passwordRepeat;

    private $_user;


    public static function GetWithUser($userId){

        if ($userId == null)
            return null;


        $pf = new ProfileForm();

        $user = $pf->getUser($userId);
        $pf->first_name = $user->first_name;
        $pf->last_name = $user->last_name;
        $pf->email = $user->email;

        return $pf;
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            ['first_name', 'trim'],
            ['first_name', 'required'],
            ['first_name', 'string', 'min' => 2, 'max' => 255],

            ['last_name', 'trim'],
            ['last_name', 'required'],
            ['last_name', 'string', 'min' => 2, 'max' => 255],

            ['email', 'readonly'],

            ['password', 'required'],
            ['password', 'string', 'min' => Yii::$app->params['user.passwordMinLength']],

            ['passwordRepeat', 'required'],
            ['passwordRepeat', 'checkPasswords']
        ];
    }

    /**
     * Signs user up.
     *
     * @return bool whether the creating new account was successful and email was sent
     */

    public function checkPasswords($attribute, $params){
        if ($this->password != $this->passwordRepeat)
            $this->addError($attribute, 'Пароли не совпадают');
            return null;
    }

    public function getUser($userId){
        if ($this->_user === null) {
            $this->_user = User::findOne($userId);
        }

        return $this->_user;
    }

    public function edit(){
        $_user->first_name = $this->first_name;
        $_user->last_name = $this->last_name;
        $_user->email = $this->email;
        $_user->setPassword($this->password);
        $_user->generateAuthKey();
        $_user->generateEmailVerificationToken();

        return $_user->save()
    }
    
}

Класс SingupForm

<?php

namespace frontend\models;

use Yii;
use yii\base\Model;
use common\models\User;

/**
 * Signup form
 */
class SignupForm extends Model
{
    public $first_name;
    public $last_name;
    public $email;
    public $password;
    public $passwordRepeat;


    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            ['first_name', 'trim'],
            ['first_name', 'required'],
            ['first_name', 'string', 'min' => 2, 'max' => 255],

            ['last_name', 'trim'],
            ['last_name', 'required'],
            ['last_name', 'string', 'min' => 2, 'max' => 255],

            ['email', 'trim'],
            ['email', 'required'],
            ['email', 'email'],
            ['email', 'string', 'max' => 255],
            ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],

            ['password', 'required'],
            ['password', 'string', 'min' => Yii::$app->params['user.passwordMinLength']],

            ['passwordRepeat', 'required'],
            ['passwordRepeat', 'checkPasswords']
        ];
    }

    /**
     * Signs user up.
     *
     * @return bool whether the creating new account was successful and email was sent
     */
    public function signup()
    {
        if (!$this->validate()) {
            return null;
        }
        
        $user = new User();
        $user->first_name = $this->first_name;
        $user->last_name = $this->last_name;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        $user->generateEmailVerificationToken();

        return $user->save() && $this->sendEmail($user);
    }

    public function checkPasswords($attribute, $params){
        if ($this->password != $this->passwordRepeat)
            $this->addError($attribute, 'Пароли не совпадают');
            return null;
    }


    /**
     * Sends confirmation email to user
     * @param User $user user model to with email should be send
     * @return bool whether the email was sent
     */
    protected function sendEmail($user)
    {
        return Yii::$app
            ->mailer
            ->compose(
                ['html' => 'emailVerify-html', 'text' => 'emailVerify-text'],
                ['user' => $user]
            )
            ->setFrom('[email protected]')
            ->setTo($this->email)
            ->setSubject('Account registration at ' . Yii::$app->name)
            ->send();
    }



}

Решил вместо SingupForm передать ProfileForm в контролере на страницу с формой регистрации, так как поля у моделей идентичные. И никакой ошибки не выдаёт, поля заполняются верно. Решил наоборот передать на страницу с формой редактирования пользователя объект SingupForm вместо ProfileForm и ошибка остаётся такой же что описана выше


Ответы (0 шт):