Yii2中公共类实现微信端wap端和PC端分离的方法(Modules)

  •   
  • 7363
  • PHP
  • 14
  • super_dodo
  • 2016/03/10

原本夜已经深了,一鼓作气再承接上文把Yii2中公共类实现微信端wap端和PC端分离的方法(Modules)的代码公布出来。关于模块化的好处就不多言了,逻辑清晰代码页简洁,此外还很模块化。我也是先前用目录形势,现在改成模块化Module。也就是吧微信端wap端以及后台等独立成模块进行开发和维护。

独立成模块需要在配置文件中进行配置。示例代码如下:

'modules' => [
	'wx' => [
		'class' => 'app\modules\wx\Module',
		'layout'=>'wx',
		'defaultRoute'=>'site',
	],
	'wap' => [
		'class' => 'app\modules\srbac\Module',
		'layout'=>'wap',
		'defaultRoute'=>'site',
	],
	'admin' => [
		'class' => 'app\modules\admin\Module',
		'layout'=>'admin',
		'defaultRoute'=>'site',
	],
],

此处的重点是进行三个版本的分类,直接上代码VController

<?php
//DoDoBook V2016
namespace app\components;
use Yii;

use app\extensions\common\MobileDetect;		//检测PC--手机--微信浏览器
//PC端   微信扫描支付+支付宝支付--手机号登陆(1000px)
//WAP端  微信扫码支付+支付宝支付--手机号登陆(320*)
//WX端   微信直接JSAPI支付--微信直接授权登陆(320*)

class VController extends BaseController{

	//控制器之前先判断用户的浏览器
	public function beforeAction($action) {
		if(Yii::$app->params['isLocalEnvironment'] == 'YES'){ return true; }
	//	return true;

		$wxWapMod = Yii::$app->controller->module->id;	//当前module
		$wxWapCon = Yii::$app->controller->id;			//当前控制器
		$wxWapAct = Yii::$app->controller->action->id;	//当前Action
		if($wxWapAct == 'error'){ return true; }
		$realWxWapPcUrl = 'http://'.$_SERVER['HTTP_HOST'].'/';

		$detect = new MobileDetect();
		if($detect->isMobile() && $detect->isWeixin() ) {	//是微信浏览器
			if($wxWapMod == 'wx'){ return true; }
			$realWxWapPcUrl .= 'wx/'.$wxWapCon.'/'.$wxWapAct;
		}else if($detect->isMobile()){						//是手机浏览器
			if($wxWapMod == 'wx'){ return true; }
			$realWxWapPcUrl .= 'wx/'.$wxWapCon.'/'.$wxWapAct;
		}else{												//PC端浏览器
			if($wxWapMod == 'dodobook'){ return true; }
			$realWxWapPcUrl .= $wxWapCon.'/'.$wxWapAct;
		}
		if($_SERVER['QUERY_STRING']){ $realWxWapPcUrl .= '?'.$_SERVER['QUERY_STRING']; } //有查询字符串
		$this->redirect($realWxWapPcUrl);		//跳转
	}

}

这样是不是清爽简单很多。
链接上一篇: Yii2中继承一个公共类实现微信端wap端和PC端分离的方法

一个生命的存在的美好,来源于另一个生命给予你的意义。《触不可及》