【发布时间】:2023-03-23 09:00:01
【问题描述】:
我正在为已经部署的 php 应用程序提供支持,但它的工作方式对我来说是新的,我不知道它是如何工作的。
基本上,使用类似路径的语法调用php方法来检索数据,例如:
<?php
// .....
$json = Request("http://_server/myfolder/abc/default/mymethod?data=something");
// Now $json var has some information.
?>
奇怪的是方法的结构。直到文件夹 'myfolder' 物理路径存在于 linux 'server' 中,您知道“.../apache/htdocs/myfolder/”,但就是这样。此外,代码的物理位置位于不同的文件夹结构中,其中 default/mymethod 根本不匹配任何文件夹。
通过深入挖掘,我发现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% 确定在运行请求调用时会触发该方法,但我不知道它是如何完成的。
我的问题是:
这是如何设置的?一定有你相关的地方:
"http://_server/myfolder/abc/default/mymethod" with "actionmethod"
但是在哪里以及如何?
我需要复制这个运行的副本,所以我可以用这样的方式调用我的副本:
"http://_server/FOLDERCOPY/myfolder/abc/default/mymethod"
我已经复制了新结构,但是调用它时,服务器找不到新的方法/路径:(
编辑*** 我在位于 /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
谢谢
【问题讨论】:
-
基本上看起来这个应用程序是多层的。正在执行请求调用的部分正在使用客户端 http 库,该库正在向 url 发出 HTTP 请求。 url 以 json 格式返回数据。现在到框架的其余部分,您应该查看服务器文档根目录中的 index.php。毫无疑问,它正在引导框架,从那里你应该能够追踪它的组件是什么。
-
就您的控制器而言,动作只是一个处理程序名称。某处将有一个路由配置将特定路由链接到该操作名称。一旦你弄清楚他们使用了什么框架,你应该能够找到它的一些文档。
标签: php methods controller