我正在 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 相同,只是我更改了类名。