标签: front-controller

什么是前端控制器以及如何在PHP中实现?

首先,我是PHP的初学者.并在此处发布了一个问题: 在项目中重构require_once文件 .我尽可能多地阅读有关Front控制器的内容,但无法了解它是如何工作的,甚至无法了解它的全部内容.

有人可以简要解释它是如何工作的以及它的全部内容吗?

谢谢.

php front-controller

25
推荐指数
1
解决办法
1万
查看次数

如何将所有请求重定向到文件,除了使用Apache的图像?

我有一个.htaccess文件,其中包含以下内容:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ entryPoint.php [QSA]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

有了这个,我希望将所有请求重定向到文件,entryPoint.php以便它可以检查它们:

  • 如果没有扩展名,则必须是一个模块
  • 如果有.php,那就是黑客攻击
  • 如果是.png,那么这是一个"安全"的电话.

    在图像的情况下,我曾经输出标题file_get_contents()及其内容.我发现它比直接读取要慢一些.

我的问题是:

entryPoint.php如果有图片参考,如何防止这个.htaccess调用?

我已经拥有的代码的额外反馈非常感谢!

.htaccess redirect front-controller

21
推荐指数
3
解决办法
4万
查看次数

启用请求日志,即使路由器脚本用于PHP内置Web服务器也是如此

PHP的内置Web服务器允许使用"路由器脚本",允许在内部重写URL.

这种路由器脚本的问题在于,无论何时它实际处理文件而不是让PHP处理它,都会导致该请求的请求日志输出被抑制.例如,请考虑以下脚本:

<?php
if (preg_match('/^\/(js|css)/', $_SERVER['REQUEST_URI']) === 1) {
  return false;
}
else {
  echo 'hello world!'
}
Run Code Online (Sandbox Code Playgroud)

这会导致请求/js/*/css/*登录控制台; 而对任何其他URL的请求只是跳过记录请求.

如何启用对控制台的所有请求的记录?

php regex url-routing front-controller

13
推荐指数
1
解决办法
371
查看次数

servlet可以确定发布到它的数据是否为enctype ="multipart/form-data"?

我有一个servlet,用于许多不同的操作,在前端控制器模式中使用.有谁知道是否可以判断回发的数据是否为enctype ="multipart/form-data"?在我决定之前,我无法读取请求参数,因此我无法将请求分派给适当的控制器.

有任何想法吗?

java servlets multipartform-data front-controller

10
推荐指数
3
解决办法
1万
查看次数

前端控制器将参数链接到应用逻辑的最佳方法?

我正在使用Front Controller设计模式构建应用程序,并且只有一个页面index.php,所有用户请求都通过该页面作为参数传递(与常规设计中的不同页面/控制器相对).

如何将这些参数连接到应用程序逻辑?

例如,我有两种不同的行为:

index.php?action=userLogin&username=admin&password=qwerty //process user login

index.php?action=displayUsersTable //show registered users
Run Code Online (Sandbox Code Playgroud)

目前我有一个array系统接受的所有操作(以及预期的参数),我将actionURL中的param与key此数组的比较进行比较,然后检查此操作所需的参数.

//1 = optional, 2=required
$systemActions = [
      "userLogin" => [
            "login" => 2,
            "password" => 2
                     ],
      "displayUsersTable" => []
                 ];
Run Code Online (Sandbox Code Playgroud)

显然,随着系统的发展,这将成为一个怪物阵列.

是否有更好的方法将发送到前端控制器的参数绑定到系统操作?

php front-controller

10
推荐指数
1
解决办法
135
查看次数

使用Front Controller模式有哪些优缺点?

我目前为我的所有网站设计了每个页面的文件,然后包含常见元素,如页眉,页脚等.但是,我注意到许多框架和CMS使用Front Controller模式.

使用前端控制器有哪些优缺点?该模式是否仅仅用在框架和CMS中,因为不知道哪个页面将存在于最终系统中?

design-patterns front-controller

9
推荐指数
3
解决办法
7413
查看次数

如何在jsf中创建用户友好和seo友好的URL?

例如,我有类文章与方法getTitle ()getContent ().

我也有使用方法的ArticlesService getAllArticles ().如何创建具有有意义名称的链接列表(由...组成#{article.title})?喜欢:

http://mysiteaddress.com/article/first-article-title
http://mysiteaddress.com/article/how-to-make-links-in-jsf
Run Code Online (Sandbox Code Playgroud)

..或类似的东西.

我可以创建具有所有必要功能的链接<h:commandLink>,但我不知道如何为它制作好的'href':它总是有href'#'.

我可以创建很好的链接,<h:outputLink>但我不知道如何添加必要的功能.


在jsp中,我创建了自己的前端控制器,它从请求中解析了URL,然后执行重定向到对应的jsp-page.

如何在JSF中实现相同的功能?

jsf jsp friendly-url front-controller

8
推荐指数
2
解决办法
9149
查看次数

Java前端控制器

我正在考虑在我的J2EE应用程序中实现Front Controller.您能否提供相同的链接(包含源代码示例)和任何标准?

最好的祝福

jsp servlets front-controller java-ee

6
推荐指数
1
解决办法
1万
查看次数

没有单例的PHP前端控制器实现:概念性问题

我有关于php中前端控制器实现的"概念"问题.

我见过的大多数前端控制器是用Singleton实现的,我不是单例模式的忠实粉丝,我创建了一个具有静态属性的Container,它将存储一个前端控制器的单一实例.

使用singleton,我必须将初始化代码放在构造函数(或构造函数调用的方法)中:

$fc = FrontController::getInstance();
Run Code Online (Sandbox Code Playgroud)

使用容器我可以将配置放在FrontController之外,这是我的目标,我仍然有一个简单的方法来检索FrontController.

$fc = Container->getFrontController();
Run Code Online (Sandbox Code Playgroud)

这段代码看起来更干净,我可以得到干净的子类,而不关心父构造函数.

在'bootstrap'时间这是完全相同的事情,但实际上与我之前的实现的区别在于,现在我可以在应用程序的任何地方(在DAO内部或Action内部)创建FrontControllers,因为构造函数不再是私有/受保护的.

我的问题是: 给我的类用户提供在应用程序的任何地方创建FrontController实例的可能性是一种"不好的做法"吗?我会写文档并与其他类交付容器,但我仍然想知道我是否应该防止奇怪的用途.

php model-view-controller front-controller

6
推荐指数
1
解决办法
955
查看次数

使用nginx通过index.php路由请求

我正在将我的服务器从Apache迁移到Nginx并拥有这个非常简单的.htaccess规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

它背后的想法是将每个请求指向前端控制器(index.php).我正在尝试用Nginx做同样的事情.我使用在线转换器来制作这个Nginx位置块:

location / {
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我将它添加到我的网站的配置时,Nginx只是下载PHP文件的源代码.作为参考,这是整个配置文件:

http://pastebin.com/tyKtM1iB

我知道PHP的工作原理,好像我删除了位置块并使文件<?php phpinfo();正常工作.

任何帮助,将不胜感激.

php apache .htaccess nginx front-controller

6
推荐指数
1
解决办法
5182
查看次数