Yii2MySQL表名和HTTP404错误



我是Yii技术的新手,但在IT行业工作多年后,我希望能大致了解软件的设计方法。但是Yii的人让我很好。

我一直在努力理解我为什么会出现HTTP404错误。

我有一个使用MySQL的Win 10环境,有最新版本的MySQL和PHP。我天真地认为Yii会支持MySQL中对象的命名标准,尤其是表名。然而,我似乎错了,所以这里有一个提醒感兴趣的人。

我使用所有小写字符作为表名,当我有一个表是两个实体之间的链接时,我使用entity1_entity2之类的名称。我使用gii从这个表中生成一个模型,并使用CRUD选项生成一个基本的初始应用程序。

我有一个漂亮的活动URL,所以我使用的初始URL是:\localhost\电影\电影播放器

其中Movies是为IIS(虚拟目录(定义的网站名称,moviector是我用于模型和控制器对象的小写名称。我使用的实际名称前缀是模型和控制器对象的MovieActor。我使用moviector作为视图子目录。

令我惊讶的是,我收到了HTTP404错误消息。我花了一天的大部分时间试图理解我做错了什么。

睡了个好觉后,第二天早上我又开始了。我决定尝试将相关表的名称从movie_aactor更改为moviector。然后我重新生成了模型和CRUD组件。这一次,当我调用相同的URL时,我惊喜地看到web应用程序向我显示了数据。

我不知道Yii的人对表格名称有什么限制,我也找不到任何文件,但这是我的经验,希望这能为其他人省去一些悲伤。

我遗漏了什么吗?或者我的故事正确吗?

首先在Yii中对表名没有要求。表或模型类名与URL没有直接关系。

当您使用gii生成模型时,系统会提示您输入表名。然后建议将模型名称作为表名称的pascal大小写版本。例如,如果表名为movie_actor,则建议的模型类名将为MovieActor。但你不必接受这一点,你可以把它变成你想要的任何东西。

然后,当您生成CRUD时,它会要求您输入模型类、搜索模型类和控制器类。这里的模型类是前面生成的MovieActor。搜索模型类可以是任何您喜欢的,但对URL来说重要的是控制器类。基于控制器类名,有一种叫做控制器id的东西。它是去掉Controller后缀后的控制器类名的kebab大小写版本。如果您将控制器命名为MovieActorController,则其控制器id将为movie-actor。您需要在url中使用这个控制器id才能访问该控制器。所以,这个控制器必须使用的url是localhostMoviesmovie-actor。您也需要使用相同的控制器id作为视图的子目录。

当您决定将表名更改为movieactor时,您可能还将控制器生成为MovieactorController。因此,它的id是movieactor,您的url和视图子文件夹是正确的。

最新更新