gpt4 book ai didi

php - Zend 多国重定向

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:07 26 4
gpt4 key购买 nike

目前我在默认位置有一个 Zend 应用程序www.example.com/{controller}/{action}

但是当用户从特定国家访问时,如何检测他们的 ip 地址并将他们重定向到这个基于 countryCode 的 urlwww.example.com/uk/{controller}/{action}?

为了检测用户访问的国家/地区,我编写了一个帮助程序:

require_once '../library/Ipinfo/ip2locationlite.class.php';

class Application_View_Helper_GetLocation extends Zend_View_Helper_Abstract
{
public function getLocation()
{

$ipLite = new ip2location_lite;
$ipLite->setKey('APIKEY');

//Get errors and locations
$locations = $ipLite->getCity($_SERVER['REMOTE_ADDR']);
$errors = $ipLite->getError();

$country = strtolower($locations['countryName']);

return "$country";
}
}

以上代码将返回国家名称。如果用户从法国访问,我如何重写 url 以便 url 变为 example.com/france/{controller}/{action}

最佳答案

将您的 View 助手重构为 Controller 插件并重定向。

Controller 插件可以在请求调度循环的早期执行,因此您可以在加载和呈现任何 Controller 之前拦截请求并重定向到另一个响应。下面的示例(警告,可能包含错误!)

class App_Plugin_DetectCountry extends Zend_Controller_Plugin_Abstract {

public function preDispatch(Zend_Controller_Request_Abstract $request) {
$ipLite = new ip2location_lite;
$ipLite->setKey('APIKEY');

//Get errors and locations
$locations = $ipLite->getCity($_SERVER['REMOTE_ADDR']);
$errors = $ipLite->getError();

$country = strtolower($locations['countryName']);

//Check if set country equals detected country
if (!isset($_COOKIE['country']) || $country !== $_COOKIE['country']) {
$_COOKIE['country'] = $country;
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl($country . '/' . $request->getControllerName() . '/' . $request->getActionName());
}
}
}

关于php - Zend 多国重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com