我大多数时候使用基于操作的URL生成,因此我避免像“url('home')”这样的链接,而更喜欢类似“action('HomeController@index)”这样的链接。这样我就可以轻松更改URL模式。
但是,“action('Home@index')”更加优雅。背后有什么陷阱吗?
不需要添加Controller后缀。如果真的需要,当你通过Artisan创建一个Controller时,它会自动添加或者报错,但实际上并没有这么做。所以,可以随意命名(但请记住,如果你想要一个名为“Dog”的控制器,而已经有一个名为“Dog”的模型,那么就会变得复杂)。
cmd+p
,然后键入 controllerdog
(或更短),我就会知道它是控制器,因为它们位于 Http/Controller
文件夹中。在您的工作流程中,我认为这并不会产生太大影响。 - Robo RobokDog
控制器通常需要Dog
模型,因此如果你使用use
导入Dog
模型,你将不得不给它起一个别名:namespace Controllers; use Models\Dog as DogModel; class Dog extends Controller {}
这样的东西。但是是的,你可以做任何想做的事情。 - alexrussellApp\Http\Controllers\Dog
。这就是Sublime Text搜索文件的方式 - 您只需键入完整路径的一部分即可。我甚至可以只输入“condog”,很有可能它将匹配到这个唯一的Dog控制器文件。 - Robo Robok在每个控制器类名的结尾加上Controller
确实感觉像是一种匈牙利命名法。然而,一个类的名称应该能够快速、明确地告诉程序员它的作用。一个DogController
并不是一个Dog
。事实上,我想不出比DogController
更好的名称了。
是的,它被命名空间为App\Http\Controllers\DogController
,看起来像是重复处理,但你有多经常考虑或引用一个类的完全限定名称呢?大多数情况下,一个类只是通过它的类名来引用,并且PHP甚至允许你在代码中使用use App\Http\Controllers\DogController;
来使DogController
成为你代码中有效的类名。
话虽如此,Laravel不会强制你使用这个约定。如果你与其他程序员一起工作,你需要有一个约定好的命名规范,而使用Laravel的命名规范既是最简单的,也是大多数Laravel程序员已经熟悉的命名规范。
不需要添加控制器后缀。这只是用户识别。这样我们就可以轻松地知道它是一个控制器。您可以正常创建Home而不是HomeController。并且action('Home@index')
将完美地工作。但是,在Laravel中,模型是不同的。如果您的模型名称是单数,则表名将是复数形式。这也不是强制性的事情。但是,如果我们在后缀中添加控制器,最好使用控制器和模型。因为我们将在控制器中添加use home
和use app\home
。这会让我们感到困惑。
use App\Http\Controllers\Dog as DogController
的方式 - 这样你只会在导入部分中添加后缀,而不是整个类。 - Robo Robok