【问题标题】:Yii2 How can I route the current Url to controller outside the root path of the current project?Yii2 如何将当前 Url 路由到当前项目根路径之外的控制器?
【发布时间】:2018-07-04 20:16:26
【问题描述】:

我在 /var/www/ 目录的主目录中有 2 个网站项目 我想要做的是创建控制器,它的视图在两个项目之间共享,而不是在两个项目上重复相同的控制器, 现在我创建它。主机 A 中的 myController.php

如何从第二台主机 B 访问控制器? 并渲染 myaction 函数?

main.php 配置文件中的 url 规则 'newpage/list'=>'myController/myaction',

编辑 :: 我正在使用这个高级模板

**DIRECTORY STRUCTURE**
common
    config/              contains shared configurations
    mail/                contains view files for e-mails
    models/              contains model classes used in both backend and frontend
    tests/               contains tests for common classes    
console
    config/              contains console configurations
    controllers/         contains console controllers (commands)
    migrations/          contains database migrations
    models/              contains console-specific model classes
    runtime/             contains files generated during runtime
backend
    assets/              contains application assets such as JavaScript and CSS
    config/              contains backend configurations
    controllers/         contains Web controller classes
    models/              contains backend-specific model classes
    runtime/             contains files generated during runtime
    tests/               contains tests for backend application    
    views/               contains view files for the Web application
    web/                 contains the entry script and Web resources
frontend
    assets/              contains application assets such as JavaScript and CSS
    config/              contains frontend configurations
    controllers/         contains Web controller classes
    models/              contains frontend-specific model classes
    runtime/             contains files generated during runtime
    tests/               contains tests for frontend application
    views/               contains view files for the Web application
    web/                 contains the entry script and Web resources
    widgets/             contains frontend widgets
vendor/                  contains dependent 3rd-party packages
environments/            contains environment-based overrides

问题是:如何从后端规则访问前端目录中的前端控制器?

【问题讨论】:

  • 您在同一个域上托管 2 个不同的网站?它们是通过 2 个不同的子域指向的吗?
  • 一种选择是创建自定义自动加载器,如果从第一个位置找不到类,它可以从第二个位置加载类。假设这两个项目是完全独立的,那么它们不共享供应商目录,那么另一种选择是将此控制器创建为单独的模块,并通过 composer 将其安装到两个项目中。或者从主机 B 创建到主机 A 的符号链接(再次使用模块更容易,然后可以对整个目录进行符号链接)。或者创建一个具有自定义结构的项目并使用基于主机的配置。
  • @Aivar 我在主配置文件开始时通过 require_once 加载了它,但路由规则仍然无法正常工作!
  • @MuhammadOmerAslam 他们是 2 个不同的主机,有 2 个不同的域 www.A.com , www.B.com

标签: php url yii yii2 url-routing


【解决方案1】:

前端和后端是两个不同的模块。当它们从 index.php 引导时,它们的行为就像两个单独的项目。因此,您不能使用 Yii 的 urlManager 从前端路由到后端,反之亦然。

也许你可以在 common/params 中维护一些参数,你可以在其中配置绝对 URL。

【讨论】:

  • 这是准确的答案,谢谢!
【解决方案2】:

实际上您可以在后端重用前端控制器类 - 您可以使用应用程序或模块的controllerMap 属性来定义自定义控制器类。例如,如果您在后端配置中添加这样的内容:

'controllerMap' => [
    'mycontroller' => 'frontend\controllers\SomeController',
],

然后frontend\controllers\SomeController 将像backend\controllers\MycontrollerController 一样工作 - backend.local/mycontroller 将使用与frontend.local/some 相同的控制器,但具有不同的上下文(可能还有布局)。

您甚至可以使用controllerNamespace 从给定的命名空间加载所有控制器。例如在后端创建单独的模块:

namespace backend\modules;

class FrontendModule extends \yii\base\Module {

    public $controllerNamespace = 'frontend\controllers';
}

然后此模块将在后端上下文中使用所有前端控制器。 backend.local/frontend/some 将使用frontend\controllers\SomeController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2021-04-12
    • 2021-12-17
    • 2015-02-08
    • 2020-06-02
    • 2013-02-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多