这个问题可以应用于任何编程语言,但是当我想到PHP时,我会相应地说出来......
我想知道如果Web应用程序使用操作参数而不是每个操作的单独文件,那么它是否被认为是错误的设计/架构。
例如: /index.php?action=edit
对战
/edit.php或/index/edit.php
我知道mod_rewrite可以将一个漂亮的网址翻译成一个参数化的网址,但是在没有必要时我会尽量避免不必要的复杂性。
感谢。
答案 0 :(得分:4)
很多时候,对于大型应用程序,(特别是对于Frameworks,例如symfony,Zend Framework,...)我们倾向于使用一个入口点:index.php
。
该入口点将收到一些信息(如您的action
参数),这将允许它将请求路由到正确的控制器(或任何您可能拥有的等效项) )
所以,简而言之:不,使用动作参数也不错设计/架构。
当然,这取决于应用程序的类型 - 但是,一般来说,有一个独特的入口点是一个很好的主意。
答案 1 :(得分:1)
两者都没有任何坏处,两者都可以使用
为小型应用程序分离被认为更好的文件,以避免不必要的复杂性。
行动方式被认为更适合为单一入口点工作的复杂应用程序提供服务,首先初始化所有站点功能,然后调用适当的模块。
我只是要警告你不要以愚蠢的方式使用这样的动作,在主'design'文件的中间做include $_GET['action']
。它既不安全又不可靠。
答案 2 :(得分:1)
嗯,我不认为这是一个糟糕的设计 - 当然还有其他可能性 - 但总的来说,这是关于程序员之间的内部协议如何做到的。尽可能多地分割PHP和HTML代码,以便进一步简化开发。
我更喜欢MVC-coding style,它将PHP和HTML彼此分开,就像你“想要它”一样。
希望这有用:)
答案 3 :(得分:1)
我会把你的例子称为至少过时或缺乏最佳实践。
/index.php?action=edit
看起来不太好,因此不是用户友好的,也不是SE友好的。
/edit.php
意味着每个动作确实只有一个文件,这显然是21世纪的不良做法,我们拥有强大的MVC框架,使我们能够摆脱这种混乱并将问题分开。
一个好的URL看起来像这样的例子:
mysite.com/user/profile/edit
表示用户模块中的位置,用户配置文件控制器和编辑操作。
答案 4 :(得分:0)
这取决于您的要求和规模。
使用单独的文件是可以的。但是,您可能会发现自己正在复制代码而没有正确地重用代码和技术。使用小型临时应用程序更容易实现这一点,但随着时间的推移,很可能变成意大利面条代码或丛林巢。
如果您使用单一入口点(使用url处理程序加载类),则必须了解其工作原理(CodeIgniter和ExpressionEngine是非常好的MVC系统,如果您不是真正擅长它),但它在编码实践中更加一致,并且比一堆单独的页面或你传递一切的switch()
语句更好地扩展。
答案 5 :(得分:0)
关于使用 mod_rewrite :未创建mod_rewrite,不应将其用作PHP体系结构的一部分。
关于每个逻辑元素一个文件。这是分离应用程序中逻辑单元的一种非常好的实用方法。它比创建内部具有大量混合逻辑的大型文件更好,随着应用程序的增长,这将变得无法维护。这与一个入口点和MVC架构没有矛盾。
拥有动作参数是CRUD控制器最常用的方法,例如,将动作分组到公共控制器很有意义
// blog controller
-> create blog entry
-> edit
-> view
-> delete
-> list ( this is a very common addition to CRUD
所有这些都有一个共同的架构,几乎所有人都接受一个id并做相关的事情。
如果你严格地谈论GET参数而不是你会看到创建中/大应用程序,你从文件中引导所有内容,唯一改变的是get参数将超出你的速度。计算机体系结构就像真正的体系结构一样,试图将东西拆分成小型,简单(可能是可重用的)单元。