Php Laravel 5中的控制器命名约定

Php Laravel 5中的控制器命名约定,php,laravel,model-view-controller,laravel-5,Php,Laravel,Model View Controller,Laravel 5,Laravel 5中的所有控制器仍使用Controller后缀命名,如AuthController和PasswordController。是否有任何理由对自己的控制器遵循这种约定,或者这些后缀只是名称空间时代之前的遗留物 我大部分时间都使用基于动作的URL生成,因此我避免像URL(“home”)这样的链接,而是更喜欢像action(“home”)这样的链接HomeController@index)。这样我就可以更改URL模式,而不会感到头痛 但是action('Home@index)更优雅。它后

Laravel 5中的所有控制器仍使用
Controller
后缀命名,如
AuthController
PasswordController
。是否有任何理由对自己的控制器遵循这种约定,或者这些后缀只是名称空间时代之前的遗留物

我大部分时间都使用基于动作的URL生成,因此我避免像
URL(“home”)这样的链接,而是更喜欢像
action(“home”)这样的链接HomeController@index)
。这样我就可以更改URL模式,而不会感到头痛


但是
action('Home@index)
更优雅。它后面有陷阱吗?

不需要添加控制器后缀。如果确实需要它,当您通过artisan创建控制器时,它会自动添加它,或者抱怨它,但事实并非如此。因此,请放心(但请记住,如果您想要控制器“Dog”,并且有一个模型“Dog”……那么,这将非常复杂)。

无需添加控制器后缀。这只是用户识别。这样我们就可以很容易地得到一个控制器。您通常可以创建Home而不是HomeController。和
action('Home@index)
将非常有效。但拉雷维尔的模型有所不同。如果型号名称为单数,则表名为复数。这也不是强制性的。但若我们在后缀中添加控制器,那个么最好使用控制器和模型。因为我们将在控制器中添加
use home
use app\home
。这会让我们感到困惑。

在每个控制器类名的末尾都有
Controller
,这确实让人感觉像是一种。然而,一个类的名称应该能迅速而明确地告诉程序员它是做什么的。
狗控制器
不是
。事实上,我想不出比狗控制器更好的名字了

是的,它的名称空间为
App\Http\Controllers\DogController
,这似乎是双重处理,但您多久会想到或引用一个类的完全限定名?大多数情况下,一个类仅通过其类名来引用,PHP甚至允许您在代码中使用
use-App\Http\Controllers\DogController
这将使
DogController
成为代码中的有效类名


也就是说,拉雷维尔不会强迫你使用这个惯例。如果您与其他程序员一起工作,您需要有一个约定的命名约定,使用Laravel的命名约定是最简单的,也是Laravel程序员最熟悉的命名约定。

当我有狗模型和狗控制器时,它有多复杂?:)它们将位于不同的名称空间中,所以没什么大不了的。当然,如果您愿意,您可以使用相同的名称命名所有文件,只需更改目录和名称空间。我并不是说这是不可能的,但您使用的是您喜欢的文本编辑器,打开了多个文件,很难区分哪个文件是带有模型的文件,哪个文件是带有控制器的文件。或者服务。或者css。你甚至不需要用.css来命名你的样式文件,你知道的。只要叫它Password.php。嘿,这会很有趣的!我使用升华文本,只需点击
cmd+p
并键入
controllerdog
(或更短),我就会知道它是一个控制器,因为它们位于
Http/controller
文件夹中。我认为这在您的工作流程中没有多大区别。我认为它复杂的主要原因是
Dog
控制器通常需要
Dog
模型,因此如果使用
use
导入
Dog
模型,则必须将其别名为:
命名空间控制器;使用Models\Dog作为DogModel;类Dog扩展了控制器{}
之类的东西。但是,是的,你可以做任何你想做的事情。那么,也许添加“Controller”作为后缀而不是前缀是个好主意:当你写“dog”时,你会得到dogController.php和dog.php。不管怎么说,这并没有什么诀窍,但请记住为什么约定是有用的。“这样我就可以毫不费力地更改URL模式。”现在,更改控制器类名时就不会不费力了,而且我倾向于重新考虑控制器,而不是我的URL。@MartinBean我不明白你的意思。我没有重构任何东西,我说的是能够在开发过程中随时更改URL,所以如果我决定(比如说)将
/login
更改为
/sign-in
。当我使用动作作为基础时,这非常简单。命名路由会更加灵活,但我不喜欢命名路由。你的URL不应该改变。为什么要破坏缓存、搜索结果和用户书签?但是,您的代码可能会更改,并且代码更改有时包括重新命名类。因此,如果您使用基于动作的链接,并且更改了控制器的名称,则必须更新指向该控制器的每个链接。我仍然认为,使用相同名称的模型和控制器并不是保留后缀的原因。这不是名称空间哲学。在这些情况下,我使用类似于
的东西,使用App\Http\Controllers\Dog作为DogController
——这样你只会用后缀污染导入部分,而不是整个类。我也说过了。我说过,如果我们的控制器和模型的名称相同,这会让人感到困惑。