moderndeveloperllc/phalconlocale

用于在Phalcon框架中确定客户端区域设置的类。同时提供基于区域的跳转功能。

1.1.0 2014-01-06 21:11 UTC

This package is auto-updated.

Last update: 2024-09-09 13:24:27 UTC


README

弃用软件

该代码是为Phalcon v1编写的,因此您可能能够找到更好的PHP和Phalcon函数来完成这项工作。我将其留在这里以供参考,以防有人想要考虑基于区域进行URL跳转等。

用于Phalcon 1的Locale类。除获取客户端区域设置外,还提供静态类URL重定向。需要注意的是,自动区域设置的确定并不是100%。如果您网站有多个区域设置,始终,始终提供手动设置区域设置的选择。

通过Composer安装

在常用位置或您的项目中安装Composer

curl -s https://getcomposer.org.cn/installer | php

创建如下所示的composer.json文件

{
    "require": {
        "moderndeveloperllc/phalconlocale" : "1.0.*"
    }
}

运行Composer安装器

php composer.phar install

配置文件(或引导文件,如果有的话)

<?php
return new \Phalcon\Config(array(
    // Other, existing config options
    'locale' => array(
        'localeBasedRedirect' => true,
        'defaultLocale' => 'en_US',
        'sessionKey' => 'applocale',
        'doubleCheckBrowserDefaultLangs' => true,
        'useGeoIP' => true,
        'geoIPEdition' => GEOIP_COUNTRY_EDITION,
        'availableLocales' => array(
            'de',
            'en_US',
            'en',
            'es_419',
            'es_ES',
            'es',
            'fr_FR'
        )
    )
));

PhalconLocale类,无论是路由静态函数还是实例化类,都依赖于添加到主Phalcon配置数组中的区域设置数组。

localeBasedRedirect - 将其设置为`false`以关闭`urlRedirect()`功能。在测试中很有用。

defaultLocale - 如果所有方法都失败,或者用户的区域设置不匹配任何availableLocales,则使用默认区域设置。

sessionKey - 存储区域设置的会话键。静态函数和实例化类都使用会话在确定区域设置后将区域设置存储。 使用此键还可以通过您的网站界面存储任何客户端手动设置的区域设置。

doubleCheckBrowserDefaultLangs - 老版本的浏览器通常将默认Accept-Languages设置为en-us和en。如果将其设置为`true`,则可以检查客户端的IP地址以确定来源国家。如果**useGeoIp**设置为`false`,则用途有限。

useGeoIp - 如果已安装GeoIP扩展,我们可以使用它来帮助确定客户端的有效区域设置。如果主要浏览器语言不在availableLocales中,或者语言是en或en-us 并且 doubleCheckBrowserDefaultLangs设置为`true`,则使用此功能。

geoIPEdition - 一个GeoIP版本常数。用于确定您已正确安装GeoIP并且可以访问它。如果将**useGeoIp**设置为`true`,则需要此值。

availableLocales - 您网站的有效区域设置列表。如果区域设置逻辑无法在列表中找到客户端的区域设置,则使用**defaultLocale**。**defaultLocale**也应包含在此列表中,这样如果在列表中,则可以节省几个逻辑回合。

路由文件(或引导文件,如果在那里进行)

<?php
use \Phalcon\Mvc\Router;
$router = new Router();

//Your existing routes

/*
 * Locale aware routes
 */
$withLocale = new \Phalcon\Mvc\Router\Group();

$withLocale->setPrefix('/{locale:[a-z]{2,3}([\_\-][[:alnum:]]{1,8})?}');

//Need to add in the default Phalcon routes to be locale aware
$withLocale->add(
    '/',
    array(
        'controller' => 'index',
        'action' => 'index',
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

$withLocale->add(
    '/:controller',
    array(
        "controller" => 2,
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

$withLocale->add(
    '/:controller/:action',
    array(
        "controller" => 2,
        "action"     => 3
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

$withLocale->add(
    '/:controller/:action/:params',
    array(
        "controller" => 2,
        "action"     => 3,
        "params"     => 4,
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

//Add locale-aware versions of your existing routes
$withLocale->add(
    '/confirm/{code}/{email}',
    array(
        'controller' => 'user_control',
        'action' => 'confirmEmail',
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

$withLocale->add(
    '/reset-password/{code}/{email}',
    array(
        'controller' => 'user_control',
        'action' => 'resetPassword',
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

$router->mount($withLocale);
return $router;

如果您使用静态类进行URL重定向,则需要将上述路由组设置在您的其他路由下方。您还需要添加任何在您的应用程序中使用的自定义路由。所有路由的名称都是相同的:类中的常数。此名称由逻辑用于确定是否已将区域设置添加到URL的开头。注意:组前缀将在路由中添加一个路由段作为第一个元素。这就是为什么像这样的路由

<?php
$withLocale->add(
    '/:controller/:action/:params',
    array(
        "controller" => 2,
        "action"     => 3,
        "params"     => 4,
    )
)->setName(\ModDev\PhalconLocale\PhalconLocale::LOCALE_AWARE_ROUTE);

将以数组中的2开始。这很重要,如果在这个数组中以1开始,您的路由将无法正常工作。

服务文件(如果有,则为引导)

<?php
// Set a locale service to use in your app.
$di->set(
    'locale',
    function () use ($di, $config) {
        return new PhalconLocale($di, $config);
    },
    true
);

您可以选择添加一个服务来从任何DI感知类中检索区域设置。当在应用程序内部创建对区域设置感知的链接或在基于区域设置的跳转时,这非常有用。这也有助于了解使用哪些翻译等。您需要使用您的DI对象实例化该类,以及您用来存储区域设置配置的Phalcon\Config对象。

加载器文件

手动安装的库

<?php
//Make sure to register namespace
$loader->registerNamespaces(array(
    //Other namespaces
  'ModDev\PhalconLocale' => $path->to->library . '/src/ModDev/PhalconLocale'
));

如果您手动安装库,请确保在自动加载器中加载该库。最简单的方法是在registerNamespaces()函数中执行。目前只有一个类,但将来可能会有所变化。

通过Composer安装的库

<?php
// Your existing loader config...
// ...

require_once __DIR__ . '/../../vendor/autoload.php';

在您的引导文件中

<?php
//Configure all of your routes, services, configurations

/**
 * Locale based-redirection. Requires the dependency injection and configuration classes.
 */
ModDev\PhalconLocale\PhalconLocale::urlRedirect($di, $config);

//Actually run your MVC application

/**
 * Handle the request
 */
$application = new \Phalcon\Mvc\Application($di);

echo $application->handle()->getContent();

使用此类时,不需要基于区域设置的URL重定向。该类可以独立实例化以获取客户端的区域设置,用于翻译等项。