0

我正在 yii2.0.4 中创建一个站点。有两个登录部分,一个用于普通用户,另一个用于商业用户,两者都有不同的表。我已经为两者创建了登录名,并且工作正常,但是当我单击注销时,它不起作用。另一个问题是假设登录用户的 ID 是 1,并且相同的 ID 属于业务用户的其他表,而不是 Yii 具有两个身份,它显示两个注销按钮,一个用于业务用户,另一个用于普通用户,但它应该只显示一个logout 和 Yii 应该为那个特定的控制器/登录保留身份。请帮助我该怎么办。

这是我的控制器{

use Yii;
use yii\helpers\FileHelper;
use yii\filters\AccessControl;
use yii\web\Controller;
use frontend\models\BusinessLoginForm;
use frontend\models\NewBusinessForm;
use yii\filters\VerbFilter;
use frontend\models\Business;
use common\models\UploadForm;
use yii\web\UploadedFile;
use common\models\UploadImage;
use common\models\BusinessCat;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use frontend\models\MessagesForm;
use common\models\Messages;




/**
 * Business controller
 */
class BusinessController extends Controller
{
    /**
     * @inheritdoc
     */
   public function behaviors()
    {
       return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'signup','confirm'],
                'rules' => [
                    [
                        'actions' => ['signup','confirm'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

     public function actions()
    {

        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }


     /**
     * Creates a new Business model.
     * If creation is successful, the browser will be redirected to the 'create' page.
     * @return mixed
     */

    public function actionCreate()
    {
             if (!\Yii::$app->users->isGuest || !\Yii::$app->business->isGuest) {
                    return $this->goHome();
                }
            $mimeMagicFile = 'yii/helpers/mimeTypes.php';
            $model = new NewBusinessForm();

            $modleimage = new UploadForm();
            $modleimage->path = Yii::$app->basePath.'/../uploads/businessImages/';

            $modleimage->imageID = UploadedFile::getInstances($model, 'imageID');
            $modleimage->businessID = time();

           if ($model->load(Yii::$app->request->post()) && $model->validate()) {

               if(count($modleimage->imageID)>0){

                   if($modleimage->multipleUpload()){

                          if($business = $model->newBusiness()){
                              $newid = Yii::$app->db->getLastInsertID();

                              foreach($model->catID as $catIDs){

                                   Yii::$app->db->createCommand()
                                    ->insert('businesscat', ['businessID' => $newid,'catID'=>$catIDs])
                                    ->execute();
                             }


                                foreach ($modleimage->imageID as $file) {

                                    $uploadfilename = $modleimage->businessID ."_".$file;
                                    Yii::$app->db->createCommand()
                                    ->insert('businessimage', ['imageID' => $uploadfilename,'businessID'=>$newid])
                                    ->execute();

                                }
                                Yii::$app->getSession()->setFlash('success', 'Your business account has been created successfully. Confirmation link has been sent your email please click on that link and verify your account.');
                                return $this->redirect(['create']); 
                          }else{
                              Yii::$app->getSession()->setFlash('error', 'Error to save data.');
                          }

                         }else{
                                    $totalimages = count($modleimage->imageID);
                                   if($totalimages>4){
                                       Yii::$app->getSession()->setFlash('error', 'You can not upload more than 4 images.');
                                   }else{
                                       Yii::$app->getSession()->setFlash('error', 'You can nt upload image more than 2 MB.');
                                   } 
                         }

                     }else{

                         if($business = $model->newBusiness()){
                              $newid = Yii::$app->db->getLastInsertID();
                             foreach($model->catID as $catIDs){

                                   Yii::$app->db->createCommand()
                                    ->insert('businesscat', ['businessID' => $newid,'catID'=>$catIDs])
                                    ->execute();
                             }

                Yii::$app->getSession()->setFlash('success', 'Your business account has been created successfully. Confirmation link has been sent your email please click on the link and verify your account.');
                                return $this->redirect(['create']); 
            }else{
                Yii::$app->getSession()->setFlash('error', 'Error to save data.');
            }

                     }
                     return $this->refresh();

           } 

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


    }

        public function actionConfirm($vcode)
        {
            $model = $this->findNewBusiness($vcode,'login');
         if($model){
            Yii::$app->db->createCommand()
          ->update('business', ['mtype' => 1,'vcode' => ''], 'vcode= "'.$vcode.'"')
          ->execute();
            return $this->render('confirm');
         }

      }

    public function actionAccount()
    {
            if (Yii::$app->business->isGuest) {
                    return $this->redirect(['login']);
                }
        return $this->render('account');
    }

        public function actionMessage($id = NUll)
        {
            if (Yii::$app->business->isGuest) {
                    return $this->redirect(['login']);
                }
            $busid = Yii::$app->business->identity->businessID;

         $inbox = Messages::find()->where(['receiverID'=>$busid])->groupBy('senderID')->orderBy(['created'=>SORT_DESC])->all();



            $msgid = $id;
            $model = new MessagesForm();

            $model->utype = 1;
            $model->sndrID = Yii::$app->business->identity->businessID;
            $model->recvID = empty($id)?$inbox[0]['senderID']:$id;

            if ($model->load(Yii::$app->request->post())) {
                 if($messages = $model->saveNewMessage()){
                      return $this->refresh();
                 }else{
                     Yii::$app->getSession()->setFlash('error', 'Error to save data.');
                 }
            }

                return $this->render('message',[
                    'model' => $model,
                    'latid' => $msgid,
                ]);

        }

        public function actionLogin()
            {
                if (!\Yii::$app->business->isGuest || !\Yii::$app->users->isGuest) {
                    return $this->goHome();
                }
                $model = new BusinessLoginForm();
                if ($model->load(Yii::$app->request->post()) && $model->login()) {
                    return $this->redirect(Yii::$app->request->referrer);
                } else {
                    return $this->render('login', [
                        'model' => $model,
                    ]);
                }
            }

    public function actionLogout()
    {
        Yii::$app->business->logout();
        return $this->goHome();
    }

    protected function findNewBusiness($id,$page)
    {
       if (($model = Business::findOne(['mtype' => '0', 'vcode' => $id])) !== null) {
            return $model;
        } else {
            return $this->redirect([$page]); 
        }
    }

}

}

这是我的前端/模型

<?php

namespace frontend\models;

use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use common\models\Category;
use common\models\BusinessCat;

/**
 * This is the model class for table "business".
 *
 * @property integer $businessID
 * @property string $Email
 * @property string $Password
 * @property string $Overview
 * @property string $qsignin
 * @property string $Bname
 * @property string $Address
 * @property string $website
 * @property string $Cnumber
 * @property integer $mtype
 * @property integer $busCat
 * @property integer $searchA
 * @property string $created
 */
class Business extends \yii\db\ActiveRecord
{
public $imageID;
public $catID;

/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'business';
}

/**
 * @inheritdoc
 */

public function rules()
{
    return [
       [['Email', 'Password', 'Overview', 'qsignin', 'Bname', 'Address', 'website', 'Cnumber', 'searchA','catID'], 'required'],
        ['Email', 'unique', 'targetClass' => '\common\models\Business', 'message' => 'This email address has already been taken.'],
        [['website'], 'string'],
        [['searchA'], 'string'],
        [['Email'], 'string', 'max' => 55],
        [['Password'], 'string', 'max' => 155],
        [['Overview'], 'string', 'max' => 500],
        [['qsignin'], 'string', 'max' => 10],
        [['Bname'], 'string', 'max' => 255],
        [['Address'], 'string', 'max' => 300],
        [['Cnumber'], 'string', 'max' => 15],
    ];
}

/**
 * @inheritdoc
 */

public function attributeLabels()
{
    return [
        'businessID' => 'Business ID',
        'Email' => 'Email',
        'Password' => 'Password',
        'Overview' => 'Overview',
        'qsignin' => 'Qsignin',
        'Bname' => 'Business Name',
        'Address' => 'Address',
        'website' => 'Website',
        'Cnumber' => 'Contact number',
        'mtype' => 'Member type',
        'catID' => 'Business Category',
        'searchA' => 'Search Area',
    ];
}

public function getBusinesscats()
{
    return $this->hasMany(Businesscat::className(), ['businessID' => 'businessID']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getBusinessimages()
{
    return $this->hasMany(Businessimage::className(), ['businessID' => 'businessID']);
}
}

我只使用 yii/web/User.php 或 UserEvent.php 创建了 yii/web/Business.php 和 BusinessEvent.php 我更改了类名。我的 getidentity 的 common/models 文件与 common/models/User.php 相同,只是我更改了类名。

4

0 回答 0