RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 582575
Accepted
Rosnowsky
Rosnowsky
Asked:2020-10-25 20:46:55 +0000 UTC2020-10-25 20:46:55 +0000 UTC 2020-10-25 20:46:55 +0000 UTC

PHP 路由。多语言和站点模块的定义(管理面板/网站)

  • 772

晚安。我绞尽脑汁,想不出如何实现多语言以及如何在管理面板和网站的常规版本之间切换。
我开始写我自己的路由器,因为我仍然不知道如何找到框架的通用语言,我就是想不通。
我真的希望有人能帮我实现我的路由选项。因此,我将描述问题和任务:

我正在创建一个网站。需要制作多语言(3 种语言)和管理面板。链接应该是这样的:
普通版

  1. http://web-site.com/
    • http://web-site.com/catalog/auto/
    • http://web-site.com/catalog/auto/product/product-url/
    • http://web-site.com/
  2. http://web-site.com/ru/
    • http://web-site.com/ru/catalog/
    • http://web-site.com/ru/catalog/auto/
    • http://web-site.com/ru/catalog/auto/product/product-url/

如果您在地址栏中添加/admin/,则重定向应该可以工作并将目录与管理面板文件连接起来。

  • http://web-site.com/admin/
  • http://web-site.com/admin/products/auto/

该文件.htaccess包含以下内容:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^favicon\.ico
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

我希望网站在打开网站时默认为俄语,即表单链接http://web-site.com/为俄语,如果用户选择不同的语言,则网站上的所有链接都会自动格式化为指定的格式语言环境,即 :
http://web-site.com/catalog/格式为http://web-site.com/en/catalog/. 我不知道如何使用 php 将所有链接转换为所需的语言环境。

这是我的路由器:

class Router {    
    public $URI = [];
    public $TEMPLATE; 
    public $MODULE = []; 
    public $LOCALE;

    function __construct() {
        self::parseQueryString();
    }

    function parseQueryString() {
        /**
         * Метод который парсит строку запроса, и возвращает массив $URI
         **/
        $parsedString = parse_url($_SERVER['QUERY_STRING'], PHP_URL_PATH);

        $parsedString = explode('/', $parsedString);

        $this->URI = $parsedString;

        return $this->URI;
    }

    function setTemplate() {
        /**
         * Этот метод должен запустить проверку на существование шаблона
         * если таков есть, то возвращает название шаблона, если нет 
         * то название шаблона ошибки
         **/
        $template = $this->TEMPLATE;

        if (!$this->checkTemplate($template, $module)) $template = 'error';

        return $template;
    }

    function checkTemplate($template, $module) {
        /**
         * Этот метод проверяет наличие файла (шаблона)
         * Возвращает TRUE | FALSE
         **/
        $checkPath = $_SERVER['DOCUMENT_ROOT'] . '/application/views/' . $module . '/';
        $checked   = false;

        if (file_exists($checkPath . $template . '.php')) $checked = true;

        return $checked;
    }

    static function redirect($path = NULL) {
        /**
         * Статический метод обычной перезагрузки.
         * Использую после отправки формы методом пост,
         * либо когда это нужно
         **/
        if (!$path) {
            $redirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $_SERVER['REQUEST_URI'];
            header("Location: $redirect");
        } else
            header("Location: /$path");
        exit;
    }
}

事情还没完,所以我才来找你。我希望有人会帮助添加或解释如何做到这一点。

首先,路由器必须接受并解析地址栏。这就是我所做的。
但现在我需要为正确的语言环境自动检测和格式化链接。例如,用户来到该站点:
http://web-site.com/他进入了俄语主页。然后转到产品目录http://web-site.com/catalog/并切换到英语,我需要将用户重定向到http://web-site.com/en/catalog/并在路由器中接受这个/en/并将其传递给一个变量$LOCALE,然后我可以使用该变量在所需的语言环境中显示必要的信息。
如果用户在地址栏中输入,http://web-site.com/admin/那么他应该被重定向到管理面板的授权页面。但我不太明白该怎么做。
我的文件夹结构是这样的:

  • web-site
    • application
      • configs
        • config.php
      • controller
        • controller.php
      • core[目录]
        • Router.php
        • Database.php
      • models[目录]
        • CatalogModel.php
        • NewsModel.php
        • ETC...
      • views
        • web_site[普通用户的网站页面类型]
        • control_panel[管理面板的页面类型]
      • loader.php
    • css
    • img
    • js
    • uploads
    • index.php

该文件loader.php在一开始就包含所有必要的文件。
然后我controller.php在文件中运行我的路由器。
不幸的是,我不知道该去哪里,下一步该做什么。如果您需要更多信息,我会提供您需要的一切。

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Victor
    2020-10-25T22:51:16Z2020-10-25T22:51:16Z

    在您描述的结构中,我不完全清楚为什么您的路由器连接在控制器中。也就是说,据我了解,顺序是

    index.php -> loader.php -> controller.php -> router.php

    这个电路中的控制器负责什么?只连接路由器?

    我认为一般的方法可以这样组织:

    index.php -> loader.php -> router.php -> controller.php

    其中 controller.php 是每个单独页面的控制器,即 CatalogController、ProductController。

    时刻二 为什么路由器里有花样?路由器的主要且唯一的任务是解析 url 并连接控制器。并且您需要在控制器中连接必要的模板。为此,您可以创建一个抽象控制器类来实现一个方法,例如 render,它将连接所需的模板。

    多语言 通常,解决方案如下所示:

    解析url,如果在站点地址后面找到类似locale的东西,就加载需要的语言文件,如果没有找到,就加载标准的。

    在模板中,所有信息的静态输出都是通过一个函数获得的,该函数通过代码从语言文件中获取所需的文本

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5