ThinkPHP 3を用いる.2.3 ThinkAdmin携帯電話パソコン共通の告白壁を作成する(七)最適化:アクセス制御
2805 ワード
この告白壁の最初の設計は、パソコン側は弾幕と微信のQRコードしか見られず、移動側は弾幕を提供し、白い情報を発表し、告白壁を見るなどの機能を提供している.
したがって、対応するコードを変更してこのアクセス制御を実現するには、異なるデバイスでのアクセスインタフェースの乱れを避ける必要があります.
最も簡単な考え方は、携帯電話側の各ページにデバイス判断コードを追加して実現することであるが、このようにして同じコードが多く発生する.この問題はオブジェクト向けの継承で簡単に解決できる.
Mobile/Clontroller/BaseControllerを新規作成します.class.phpは各移動ページのControllerに継承するので、BaseControllerで一度だけ実現すればコード冗長性の問題を解決できる.ThinkPHPを使用した初期化関数_initialize()にあります.
Mobile/Controller/BaseController.class.php
したがって、対応するコードを変更してこのアクセス制御を実現するには、異なるデバイスでのアクセスインタフェースの乱れを避ける必要があります.
最も簡単な考え方は、携帯電話側の各ページにデバイス判断コードを追加して実現することであるが、このようにして同じコードが多く発生する.この問題はオブジェクト向けの継承で簡単に解決できる.
Mobile/Clontroller/BaseControllerを新規作成します.class.phpは各移動ページのControllerに継承するので、BaseControllerで一度だけ実現すればコード冗長性の問題を解決できる.ThinkPHPを使用した初期化関数_initialize()にあります.
Mobile/Controller/BaseController.class.php
<?php
namespace Mobile\Controller;
use Think\Controller;
class BaseController extends Controller{
public function _initialize(){//
if(!$this->isMobile()){
$this->redirect('/Home/');
}
}
function isMobile(){
// HTTP_X_WAP_PROFILE
if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
// TPM , TPM
if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
return true;
// via wap ,
if (isset ($_SERVER['HTTP_VIA']))
// flase, true
return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
// ,
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
);
// HTTP_USER_AGENT
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
return true;
}
}
// , ,
if (isset ($_SERVER['HTTP_ACCEPT'])) {
// wml html
// wml html wml html
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
}
というisMobile関数は使用頻度が高く、複数のモジュールが使用するので、共通の方法に書くこともできますが、Comon/functionに書いてみました.phpでは機能しません