Authored by whb

注册相关

... ... @@ -375,7 +375,7 @@ class AbstractAction extends Controller_Abstract
return $udid;
}
/*
* 设置网站SEO的标题
*
... ...
<?php
namespace LibModels\Web\Passport;
use Api\Yohobuy;
use Api\Sign;
use Plugin\Helpers;
class RegData extends \LibModels\Wap\Passport\RegData
{
/**
* 根据手机号获取用户信息[TODO +cache]
*
* @param string $area
* @param string $mobile
* @return string
*/
public static function getUserInfoByMobile($area, $mobile)
{
$param = Yohobuy::param();
$param['method'] = 'app.passport.userlist';
$param['mobile'] = Helpers::makeMobile($area, $mobile);
$param['debug'] = 'Y';
$param['screen_size'] = '320x568';
$param['client_secret'] = Sign::getSign($param);
return Yohobuy::post(Yohobuy::API_URL, $param);
}
}
\ No newline at end of file
... ...
... ... @@ -109,5 +109,45 @@ class Cache
{
return md5($prefix . '_' . $key);
}
/**
* 累加
*
* @param string $key
* @param int $offset
* @param int $initialValue
* @param int $expiry
* @return boolean
*/
public static function increment($key, $offset = 1, $initialValue = 0, $expiry = 0) {
return self::getMemcache('master')->increment(self::makeKey($key, 'master'), $offset, $initialValue, $expiry);
}
/**
* 递减
*
* @param string $key
* @param int $offset
* @return boolean
*/
public static function decrement($key, $offset = 1) {
return self::getMemcache('master')->decrement(self::makeKey($key, 'master'), $offset);
}
/**
* 获取memcache
*
* @param string $host
* @return object
*/
private static function getMemcache($host) {
$cache = new \stdClass();
if (DIRECTORY_SEPARATOR === '\\') {
$cache = HoodCache::Memcache($host);
}
else {
$cache = HoodCache::Memcached($host);
}
return $cache;
}
}
... ...
<?php
namespace Plugin;
use Hood\Session;
class Captcha {
private static $V = array(
"a",
"e",
"i",
"o",
"u",
"y"
);
private static $VN = array(
"a",
"e",
"i",
"o",
"u",
"y",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
);
private static $C = array(
"b",
"c",
"d",
"f",
"g",
"h",
"j",
"k",
"m",
"n",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"z"
);
private static $CN = array(
"b",
"c",
"d",
"f",
"g",
"h",
"j",
"k",
"m",
"n",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"z",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
);
private $_width = 160;
private $_height = 60;
private $_fs = 28;
private $_dotNoiseLevel = 50;
private $_lineNoiseLevel = 5;
private $_wordLen = 6;
private $_useNumbers = true;
/**
* Generate new random word
*
* @return string
*/
protected function _generateWord() {
$word = '';
$wordLen = $this->getWordLen ();
$vowels = $this->_useNumbers ? self::$VN : self::$V;
$consonants = $this->_useNumbers ? self::$CN : self::$C;
for($i = 0; $i < $wordLen; $i = $i + 2) {
$consonant = $consonants [array_rand ( $consonants )];
$vowel = $vowels [array_rand ( $vowels )];
$word .= $consonant . $vowel;
}
if (strlen ( $word ) > $wordLen) {
$word = substr ( $word, 0, $wordLen );
}
return $word;
}
public function getWordLen() {
return $this->_wordLen;
}
/**
* 设置验证码长度
*
* @param string $wordLen
* @return \Plugin\Captcha
*/
public function setWordLen($wordLen) {
$this->_wordLen = $wordLen;
return $this;
}
/**
* 获取图像宽度
*
* @return int
*/
public function getWidth() {
return $this->_width;
}
/**
* 获取图像高度
*
* @return int
*/
public function getHeight() {
return $this->_height;
}
/**
* 设置图像宽度
*
* @param int $width
* @return \Plugin\Captcha
*/
public function setWidth($width) {
$this->_width = $width;
return $this;
}
/**
* 设置图像高度
*
* @param int $height
* @return \Plugin\Captcha
*/
public function setHeight($height) {
$this->_height = $height;
return $this;
}
/**
*
*/
public function getFontSize() {
return $this->_fs;
}
public function setFontSize($fs) {
$this->_fs = $fs;
return $this;
}
/**
* 设置干扰点
*
* @param string $noise
* @return \Plugin\Captcha
*/
public function setDotNoiseLevel($noise = 100) {
$this->_dotNoiseLevel = $noise;
return $this;
}
/**
* 设置干扰线
*
* @param string $noise
* @return \Plugin\Captcha
*/
public function setLineNoiseLevel($noise = 5) {
$this->_lineNoiseLevel = $noise;
return $this;
}
/**
* 获取干扰点
*
* @return string
*/
public function getDotNoiseLevel() {
return $this->_dotNoiseLevel;
}
/**
* 获取干扰线
*
* @return string
*/
public function getLineNoiseLevel() {
return $this->_lineNoiseLevel;
}
/**
* Generate random frequency
*
* @return float
*/
protected function _randomFreq() {
return mt_rand ( 700000, 1000000 ) / 15000000;
}
/**
* Generate random phase
*
* @return float
*/
protected function _randomPhase() {
// random phase from 0 to pi
return mt_rand ( 0, 3141592 ) / 1000000;
}
/**
* Generate random character size
*
* @return int
*/
protected function _randomSize() {
return 0;
return mt_rand ( 300, 700 ) / 100;
}
public function getFont() {
return dirname ( __FILE__ ) . '/ttf/2.ttf';
}
/**
* 将验证码存入Sessioin
*
* @param string $namespace
* @param string $code
* @return true
*/
public static function setToSession($namespace, $code) {
self::getSessionObject($namespace)->captcha = $code;
return true;
}
/**
* 从session中取出已经生成的验证码
*
* @param string $namespace
* @return string|false
*/
public static function getFromSession($namespace) {
$code = self::getSessionObject($namespace)->captcha;
if (!empty( $code )) {
return $code;
} else {
return false;
}
}
/**
* Constructor
*
* @param array $options
* @return void
*/
public function __construct($options = null) {
if (isset ( $options )) {
foreach ( $options as $k => $v ) {
call_user_func ( array ($this, 'set' . ucfirst ( $k ) ), $v );
}
}
}
public function generate($namespace) {
$word = $this->_generateWord ();
self::setToSession ( $namespace, $word );
header ( "Content-type: image/png" );
$this->_generateImage ( $word );
return $word;
}
/**
* 生成验证码
*
* @param string $word
*/
protected function _generateImage($word) {
if (! extension_loaded("gd")) {
exit("Image CAPTCHA requires GD extension");
}
if (! function_exists("imagepng")) {
exit("Image CAPTCHA requires PNG support");
}
if (! function_exists("imageftbbox")) {
exit("Image CAPTCHA requires FT fonts support");
}
$font = $this->getFont();
if (empty($font)) {
exit("Image CAPTCHA requires font");
}
$w = $this->getWidth ();
$h = $this->getHeight ();
$fsize = $this->getFontSize ();
$img = imagecreatetruecolor ( $w, $h );
$text_color = imagecolorallocate ( $img, 0, 0, 0 );
$bg_color = imagecolorallocate ( $img, 255, 255, 255 );
imagefilledrectangle ( $img, 0, 0, $w - 1, $h - 1, $bg_color );
$textbox = imageftbbox ( $fsize, 0, $font, $word );
$x = ($w - ($textbox [2] - $textbox [0])) / 2;
$y = ($h - ($textbox [7] - $textbox [1])) / 2;
imagefttext ( $img, $fsize, 0, $x, $y, $text_color, $font, $word );
// generate noise
for($i = 0; $i < $this->_dotNoiseLevel; $i ++) {
imagefilledellipse ( $img, mt_rand ( 0, $w ), mt_rand ( 0, $h ), 2, 2, $text_color );
}
for($i = 0; $i < $this->_lineNoiseLevel; $i ++) {
imageline ( $img, mt_rand ( 0, $w ), mt_rand ( 0, $h ), mt_rand ( 0, $w ), mt_rand ( 0, $h ), $text_color );
}
// transformed image
$img2 = imagecreatetruecolor ( $w, $h );
$bg_color = imagecolorallocate ( $img2, 255, 255, 255 );
imagefilledrectangle ( $img2, 0, 0, $w - 1, $h - 1, $bg_color );
// apply wave transforms
$freq1 = $this->_randomFreq ();
$freq2 = $this->_randomFreq ();
$freq3 = $this->_randomFreq ();
$freq4 = $this->_randomFreq ();
$ph1 = $this->_randomPhase ();
$ph2 = $this->_randomPhase ();
$ph3 = $this->_randomPhase ();
$ph4 = $this->_randomPhase ();
$szx = $this->_randomSize ();
$szy = $this->_randomSize ();
for($x = 0; $x < $w; $x ++) {
for($y = 0; $y < $h; $y ++) {
$sx = $x + (sin ( $x * $freq1 + $ph1 ) + sin ( $y * $freq3 + $ph3 )) * $szx;
$sy = $y + (sin ( $x * $freq2 + $ph2 ) + sin ( $y * $freq4 + $ph4 )) * $szy;
if ($sx < 0 || $sy < 0 || $sx >= $w - 1 || $sy >= $h - 1) {
continue;
} else {
$color = (imagecolorat ( $img, $sx, $sy ) >> 16) & 0xFF;
$color_x = (imagecolorat ( $img, $sx + 1, $sy ) >> 16) & 0xFF;
$color_y = (imagecolorat ( $img, $sx, $sy + 1 ) >> 16) & 0xFF;
$color_xy = (imagecolorat ( $img, $sx + 1, $sy + 1 ) >> 16) & 0xFF;
}
if ($color == 255 && $color_x == 255 && $color_y == 255 && $color_xy == 255) {
// ignore background
continue;
} elseif ($color == 0 && $color_x == 0 && $color_y == 0 && $color_xy == 0) {
// transfer inside of the image as-is
$newcolor = 0;
} else {
// do antialiasing for border items
$frac_x = $sx - floor ( $sx );
$frac_y = $sy - floor ( $sy );
$frac_x1 = 1 - $frac_x;
$frac_y1 = 1 - $frac_y;
$newcolor = $color * $frac_x1 * $frac_y1 + $color_x * $frac_x * $frac_y1 + $color_y * $frac_x1 * $frac_y + $color_xy * $frac_x * $frac_y;
}
imagesetpixel ( $img2, $x, $y, imagecolorallocate ( $img2, $newcolor, $newcolor, $newcolor ) );
}
}
// generate noise
for($i = 0; $i < $this->_dotNoiseLevel; $i ++) {
imagefilledellipse ( $img2, mt_rand ( 0, $w ), mt_rand ( 0, $h ), 2, 2, $text_color );
}
for($i = 0; $i < $this->_lineNoiseLevel; $i ++) {
imageline ( $img2, mt_rand ( 0, $w ), mt_rand ( 0, $h ), mt_rand ( 0, $w ), mt_rand ( 0, $h ), $text_color );
}
imagepng ( $img2 );
imagedestroy ( $img );
imagedestroy ( $img2 );
}
/**
* 获取session对象
*
* @param string $namespace
* @return object
*/
public static function getSessionObject($namespace)
{
if(strtoupper(substr(PHP_OS,0,3)) === 'WIN')
{
return Session::fileStart($namespace);
}
else
{
return Session::start($namespace, null, 'yohobuy.com');
}
}
}
\ No newline at end of file
... ...
... ... @@ -13,6 +13,9 @@ class Channel
public static function getFormat($channel, $data)
{
if(empty($data)) {
return array();
}
// 通用处理器
$result = Process::getContent($data, $channel);
$channelResult = array();
... ...
... ... @@ -322,11 +322,14 @@ class Process
'singlehot' => array(
'name' => '',
'imgHot' => array(),
'brands' => array()
'brands' => array(),
'navs'=> array(),
)
);
// text模版
$result['singlehot']['name'] = $title;
//textNav模版
$result['singlehot']['navs'] = self::mergeNavProcess($source, $type);
// goods模版
$result['singlehot']['imgHot'] = self::mergeGoodsProcess($goods, $type);
// floor模版
... ... @@ -503,6 +506,7 @@ class Process
);
// text
$result['girlkids']['name'] = $data[$key]['data']['text'];
// goods
$result['girlkids']['imgHot'] = self::mergeGoodsProcess($data[$key + 2], $type);
unset($data[$key], $data[$key + 1], $data[$key + 2]);
... ... @@ -762,7 +766,7 @@ class Process
$skns = '';
foreach ($data['data'] as $val) {
$skns .= $val['id'] . ' ';
}
}
$params = array(
'query' => rtrim($skns),
'client_type' => 'web'
... ...
... ... @@ -776,5 +776,34 @@ class Helpers
}
return 'http://item.yohobuy.com/product/pro_' . $product_id . '_' . $goods_id . '/' . $cn_alphabet. '.html';
}
/**
* 获取真实IP
*
* @return string
*/
public static function getClientIp()
{
$ip = '0.0.0.0';
if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != '')
$ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '')
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] != '')
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}
/**
* 组合国际手机号
* @param $area
* @param $mobile
* @return string
*/
public static function makeMobile($area, $mobile){
if(empty($area) || $area == 86){
return $mobile;
}
return $area.'-'.$mobile;
}
}
... ...
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
<?php
namespace Passport;
use LibModels\Web\Home\IndexData;
use LibModels\Web\Passport\RegData;
use Plugin\Images;
use Plugin\Captcha;
class RegModel
{
const LEFT_BANNER_CODE = 'c479ec90120cae7f96e52922b4917064';
/**
* 获取左侧banner
*
* @return array
*/
public static function getLeftBanner()
{
$ret = array('img'=>'','url'=>'');
$resource = IndexData::getResourceData(self::LEFT_BANNER_CODE);
if(isset($resource['data'][0]))
{
$val = current($resource['data'][0]['data']);
$ret['img'] = Images::getImageUrl($val['src'], 252, 190);
$ret['url'] = $val['url'];
}
return $ret;
}
/**
* 校验验证码
*
* @param string $verifyCode
* @return boolean
*/
public static function verifyCode($verifyCode)
{
$verifyCode = strtolower($verifyCode);
$ret = true;
//检测验证码不正确
if($verifyCode != strtolower(Captcha::getFromSession('passport_istration'))) {
$ret = false;
}
return $ret;
}
/**
* 根据手机号获取用户信息
*
* @param string $area
* @param string $mobile
* @return array
*/
public static function getUserInfoByMobile($area, $mobile) {
$ret = array();
$data = RegData::getUserInfoByMobile($area, $mobile);
if($data['code'] == 200) {
if(!empty($data['data'])) {
$ret = current($data['data']);
}
}
return $ret;
}
}
\ No newline at end of file
... ...
<?php
use Action\WebAction;
use Plugin\Captcha;
class ImagesController extends WebAction
{
/**
* 验证码-生成
*
* @return mixed 验证码图片
*/
public function indexAction()
{
$g = trim($this->get('g'));
$namespace = !empty($g) ? $g : 'passport_istration';
$imgCode = new Captcha();
$imgCode->setWidth(150)->setHeight(50)->setWordLen(4)->generate($namespace);
exit();
}
/**
* 验证码-检测
*
* @param string auth_code (验证码)
* @return string true|false
*/
public function verifyimgcodeAction ()
{
if (strtolower($this->get('auth_code')) !== strtolower(Captcha::getFromSession('passport_istration')))
{
die('false');
}
die('true');
}
}
\ No newline at end of file
... ...
<?php
use Action\AbstractAction;
class RegisterController extends AbstractAction
{
/**
* 登录页
*/
public function indexAction()
{
$data = array(
'registerPage' => true,
'passport' => array(
'actionUrl' => '/passport/register/mobileregister',
'region' => array(
array(
'id' => 86,
'name' => '中国',
'selected' => true
),
array(
'id' => 853,
'name' => '中国澳门',
'selected' => false
),
array(
'id' => 886,
'name' => '中国台湾',
'selected' => false
),
array(
'id' => 65,
'name' => '中国香港',
'selected' => false
),
array(
'id' => 60,
'name' => '马来西亚',
'selected' => false
),
),
'location' => '+86',
'captchaUrl' => 'http://www.yohobuy.com/passport/images?t=1449799445',
'itemUrl' => '##',
'referUrl' => 'http://www.yohobuy.com/',
'loginUrl' => '/signin.html?refer=http://www.yohobuy.com/',
'coverHref' => '/passport',
'coverImg' => 'http://img12.static.yhbimg.com/yhb-img01/2015/12/01/07/020a0b6e7ff908d0c2bc4045b4fef42b9f.png?imageView/2/w/252/h/190'
)
);
$this->_view->display('index', $data);
}
public function checkmobileAction()
{
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
public function piccaptchaAction()
{
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
public function msgcaptchaAction()
{
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
<?php
use Action\WebAction;
use LibModels\Web\Passport\RegData;
use Passport\RegModel;
use Plugin\Helpers;
use Plugin\Cache;
class RegisterController extends WebAction
{
/**
* 注册页
*/
public function indexAction()
{
$refer = $this->get('refer', SITE_MAIN);
$cover = RegModel::getLeftBanner();
$data = array(
'registerPage' => true,
'passport' => array(
'actionUrl' => '/passport/register/mobileregister',
'region' => RegData::getAreasData(),
'location' => '+86',
'captchaUrl' => 'http://web.dev.yohobuy.com/passport/images?t=1449799445',
'itemUrl' => '##',
'referUrl' => $refer,
'loginUrl' => '/signin.html?refer='.$refer,
'coverHref' => $cover['url'],
'coverImg' => $cover['img']
)
);
$this->setCookie('refer', $refer);
$this->_view->display('index', $data);
}
/**
*
*/
public function checkmobileAction()
{
$mobile = trim($this->post('mobile'), ' ');
$area = intval(trim($this->post('area'), ' '));
$ip = Helpers::getClientIp();
$data = array('code' => 400, 'message' => '', 'data' => '');
$ip_key = md5('ip_checkmobile_' . $ip);
$ip_times = Cache::increment($ip_key);
do{
/* 判断是不是AJAX请求 */
if (!$this->isAjax()) {
break;
}
/* 判断参数是否合法 */
if (!is_numeric($mobile) || !is_numeric($area)) {
$data['message'] = '手机号码格式不正确';
break;
}
if ($ip_times >= 1000) {
$data['message'] = '由于你IP受限无法注册';
break;
}
if(!empty(RegModel::getUserInfoByMobile($area, $mobile))) {
$data['message'] = '手机号码已经存在';
break;
}
$data['code'] = 200;
} while(false);
$this->echoJson($data);
}
/**
* 校验并发送验证码
*
* @return json
*/
public function piccaptchaAction()
{
$mobile = trim($this->post('mobile'), ' ');
$area = intval(trim($this->post('area'), ' '));
$verifyCode = strtolower(trim($this->post('code'),' '));
$data = array('code' => 400, 'message' => '', 'data' => '');
do
{
/* 判断是不是AJAX请求 */
if (!$this->isAjax()) {
break;
}
/* 判断参数是否合法 */
if (!is_numeric($mobile) || !is_numeric($area)) {
$code = 400;
$data['message'] = '手机号码格式不正确';
break;
}
//检测验证码不正确
if(!RegModel::verifyCode($verifyCode)) {
$data['message'] = '验证码不正确';
break;
}
/* 向手机发送注册验证码 */
$data = RegData::sendCodeToMobile($area, $mobile);
if (!isset($data['code'])) {
break;
}
}
while(false);
$this->echoJson($data);
}
public function msgcaptchaAction()
{
$this->echoJson(array('code'=>200));
}
/**
* 手机注册
*
*/
public function mobileregisterAction()
{
$mobile = trim($this->post('phoneNum'), ' ');//mobile
$area = intval(trim($this->post('region'), ' '));//area
$verifyCode = strtolower(trim($this->post('captcha'),' '));//captcha
$code = trim($this->post('msgCaptcha'),'');//code
$password = $this->post('pwd');
$url = '/passport/register/index';
$refer = $this->getCookie('refer');
$data = array('code' => 400, 'message' => '', 'data' => '');
if(!empty($refer)) {
$refer = $url.'?refer='.$refer;
}
do
{
/* 判断参数是否合法 */
if (!is_numeric($mobile) || !is_numeric($area)) {
$data['message'] = '手机号码格式不正确';
break;
}
//检测验证码不正确
if(!RegModel::verifyCode($verifyCode)) {
$data['message'] = '验证码不正确';
break;
}
/* 判断密码是否符合规则 */
if (!Helpers::verifyPassword($password)) {
$data['message'] = '密码不正确';
break;
}
/* 验证注册的标识码是否有效 */
$data = RegData::validMobileCode($area, $mobile, $code);
if (!isset($data['code']) || $data['code'] != 200) {
$data['message'] = '验证码错误';
break;
}
/*手机注册*/
$data = RegData::regMobile($area, $mobile, $password);
if (!isset($data['code']) || $data['code'] != 200) {
break;
}
/* 返回跳转到来源页面 */
$refer = $this->getCookie('refer');
if (empty($refer)) {
$refer = SITE_MAIN;
} else {
$refer = rawurldecode($refer);
}
// $data['data']['href'] = $refer;
// $data['data']['session'] = Helpers::syncUserSession($data['data']['uid']);
$token = Helpers::makeToken($data['data']['uid']);
$this->setCookie('_TOKEN', $token);
$this->setSession('_TOKEN', $token);
$this->setSession('_LOGIN_UID', $data['data']['uid']);
//$this->setSession('session_key', $data['data']['session_key']);
}while(false);
$this->go($refer);
}
}
\ No newline at end of file
... ...
<?php
use Action\AbstractAction;
class RegisterController extends AbstractAction
{
/**
* 登录页
*/
public function indexAction()
{
$data = array(
'registerPage' => true,
'passport' => array(
'actionUrl' => '/passport/register/mobileregister',
'region' => array(
array(
'id' => 86,
'name' => '中国',
'selected' => true
),
array(
'id' => 853,
'name' => '中国澳门',
'selected' => false
),
array(
'id' => 886,
'name' => '中国台湾',
'selected' => false
),
array(
'id' => 65,
'name' => '中国香港',
'selected' => false
),
array(
'id' => 60,
'name' => '马来西亚',
'selected' => false
),
),
'location' => '+86',
'captchaUrl' => 'http://web.dev.yohobuy.com/passport/images?t=1449799445',
'itemUrl' => '##',
'referUrl' => 'http://www.yohobuy.com/',
'loginUrl' => '/signin.html?refer=http://www.yohobuy.com/',
'coverHref' => '/passport',
'coverImg' => 'http://img12.static.yhbimg.com/yhb-img01/2015/12/01/07/020a0b6e7ff908d0c2bc4045b4fef42b9f.png?imageView/2/w/252/h/190'
)
);
$this->_view->display('index', $data);
}
public function checkmobileAction()
{
$mobile = trim($this->get('mobile'), ' ');
$area = intval(trim($this->get('area'), ' '));
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
public function piccaptchaAction()
{
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
public function msgcaptchaAction()
{
$data = array(
'code' => 200
);
$this -> echoJson($data);
}
}
\ No newline at end of file
... ...
;woman首页
routes.productsale.type = "rewrite"
routes.productsale.match = "/woman"
routes.productsale.route.module = Index
routes.productsale.route.controller = Girls
routes.productsale.route.action = index
\ No newline at end of file
routes.girlindex.type = "rewrite"
routes.girlindex.match = "/woman"
routes.girlindex.route.module = Index
routes.girlindex.route.controller = Girls
routes.girlindex.route.action = index
;验证码
routes.passportimage.type = "rewrite"
routes.passportimage.match = "/passport/images"
routes.passportimage.route.module = Passport
routes.passportimage.route.controller = Images
routes.passportimage.route.action = index
\ No newline at end of file
... ...
;验证码
routes.passportimage.type = "rewrite"
routes.passportimage.match = "/test"
routes.passportimage.route.module = Passport
routes.passportimage.route.controller = Images
routes.passportimage.route.action = index
... ...