如何设置PHP控制器

时间:2013-11-07 18:19:31

标签: php methods controller

我支持已部署的php应用程序,但它的工作方式对我来说是新的,我不知道它是如何做的。

基本上,使用类似路径的语法调用php方法来检索数据,例如:

<?php
// .....
$json = Request("http://_server/myfolder/abc/default/mymethod?data=something");
// Now $json var has some information.
?>

奇怪的是方法是如何构建的。在linux'server'中存在文件夹'myfolder'物理路径,你知道“... / apache / htdocs / myfolder /”但那就是IT。除此之外,代码的物理位置在不同的文件夹结构中,其中默认/ mymethod 完全匹配NO文件夹。

通过深入挖掘,我发现 mymethod 对应于位于以下位置的PHP方法:

apache/htdocs/myfolder/protected/modules/abc/controllers/defaultcontroller.php

在defaultcontroller.php里面有这样的东西:

<?php
// ....
Class DefaultController {
    // ....
    Public Function actionmymethod { // Notice the name of mymethod has 'action'
        // more code
        return $response;
    }
}
?>

我100%确定在运行Request调用时触发了该方法,但是我不知道它是如何完成的。

我的问题是:

如何完成此设置?必须有一些与你有关的地方:

"http://_server/myfolder/abc/default/mymethod" with "actionmethod"

但在哪里以及如何?

我需要复制一下这个运行,所以我可以用这样的方式调用我的副本:

"http://_server/FOLDERCOPY/myfolder/abc/default/mymethod" 

我已经复制了新结构,但在调用它时,服务器无法找到新的方法/路径:(

EDIT *** 我在位于/ myfolder /

的htaccess中找到了这个
RewriteEngine on
RewriteBase /myfolder/ 

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php
RewriteRule . index.php

我在/ FOLDERCOPY / myfolder中修改了副本,但似乎无效:(

RewriteEngine on
RewriteBase /FOLDERCOPY/myfolder/ 

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php
RewriteRule . index.php

由于

1 个答案:

答案 0 :(得分:0)

并非每个网址都以1:1的方式映射到服务器的文件系统。

显然,.../apache/htdocs/myfolder/内应该有一个php脚本,很可能是index.php。还应该有一些重写规则,可能在.htaccess文件中,将http://_server/myfolder下的网址转换为该脚本,将剩余部分转换为参数(query_string或{{1 }})。

从这一点开始,php接管了。该结构意味着存在MVC框架。该框架似乎支持模块,其中一个是path_info,调用abc控制器的default方法来处理请求。所以url结构是这样的:

mymethod

http://server/site/module/controller/method?params .../apache/htdocs/myfolder/?)下查找配置文件。它将包含有关模块位置和控制器映射(路由)的规则。然后,可能会有一个全局站点配置,以及每个模块一个...