繁体   English   中英

Yii2:解决控制器和模块名称歧义的正确方法

[英]Yii2: a proper way to resolve ambiguity of controller and module names

据我所知,目前Yii 2还没有开箱即用的方法来解决控制器和模块名称的歧义。 一个模块层次结构的示例来描述我的确切含义:

app\\modules\\v1\\controllers\\UserController //解析/ v1 / users和/ v1 / users / {id}操作app\\modules\\v1\\modules\\user\\Module.php //嵌套模块,解析/ v1 /用户/ ...控制器及其操作,例如/ v1 / user / something / {id}

在这种情况下,UserController与用户模块冲突。 产生歧义的主要原因是Yii 2框架的单数复数魔术。 我没有找到合适的解决方案来解决这种歧义。 进一步我的想法如何解决它。

  1. 重命名模块。
  2. 将UserController重命名为UsersController。
  3. 创建一个附加子模块,并将其放置在UserController中。 例如app\\modules\\v1\\modules\\root\\controllers\\UserController

我不确定这些选项中的至少一个是否是一种非常优雅的选项,并且考虑到Yii 2的理念是否是正确的解决方案。

回到主要问题,用Yii 2哲学解决该问题的更合适方法是什么? 控制器和模块是两种不同类型的对象,它们是否具有不同的多元性,因此对于所描述的情况,应该是在路由中将它们分开的正确方法。

我不确定我是否可以完全理解这个问题,但是可能您在问类名别名

use My\Full\Classname as Another;

我通常如何处理这个问题取决于我如何组织事物。

假设我有usersdepartmentsorders以及其他一些东西。 所有这些概念都有其自己的模块,其中发生了所有交互。 如果我想为所有这些概念创建REST控制器,则可以选择向每个模块添加控制器,也可以为控制器创建专用的API模块。

为此目的创建专用模块时,通常将其命名为api,也许其中包含一些嵌套的版本控制模块。 因此,在这种情况下,我将获得以下结构app\\modules\\api\\controllers\\UserController ,这将导致URL /api/user 那里没有歧义,很清楚这意味着什么。

当将这样的控制器添加到模块本身时,我会选择一个比“ UserController”更好的名称。 当问自己“这个控制器能完成什么?/它能做什么?”的问题时。 我发现只是UserController无法削减它; 特别是在User模块内部时,会导致/user/user 该控制器可能会与User模块中的一个或多个不同的控制器并存,所有这些控制器都具有不同的含义。 因此,通常,我最终将其命名为ApiController ,结果为/user/api 另一个控制器可以是ProfileController 因此,在查看URL时,很清楚/user/api/user/profile作用。 没有歧义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM