【问题标题】:How to setup PHP Controller如何设置 PHP 控制器
【发布时间】: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


【解决方案1】:

并非每个 url 都以 1:1 的比例映射到服务器的文件系统。

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

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

http://server/site/module/controller/method?params

.../apache/htdocs/myfolder/ (config.php?) 下查找配置文件。它将包含有关模块位置和到控制器的映射(路由)的规则。再说一次,可能有一个全局站点配置,以及每个模块一个......

【讨论】:

  • 有一个重写规则,但似乎无法使它工作:(
  • @Paris 在/FOLDERCOPY/myfolder 中创建一个包含&lt;?php echo "hello";test.php 文件,并将相关.htaccess 中的index.php 更改为test.php。结果如何?
  • 我的 .htaccess 和上面一样,但是使用 test.php RewriteBase /FOLDERCOPY/myfolder/ RewriteRule 。 test.php 我正在调用 example.com/FOLDERCOPY/myfolder/whatever 服务器说 The Requested URL is not found
  • 我认为问题在于我有两个 .htaccess 文件,一个在 /myfolder/ 另一个在 /FOLDERCOPY/myfolder。我怎样才能同时拥有两个规则而不互相干扰?
  • @Paris 我认为你必须阅读mod_rewrite
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 2012-04-29
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多