【发布时间】:2012-08-09 00:14:29
【问题描述】:
在工作 PHP MVC 上,在 CONTROLLER 文件夹上我有一个文件控制器,但里面有必须在文件夹中调用控制器的文件夹。
下面有没有更好的方法和很好的代码实现?
我正在研究这种方式,但我不确定这是调用控制器的最佳方式吗?
/*
STRUCTURE OF DIR FILES: controllers:
a/b/c/file.php
a/b/c <-- IS DIRECTORY
a/b/c <-- IS FILE
*/
$uri_result = false;
$controller_called = false;
/* called controllers */
$uri_segments[0] = 'a';
$uri_segments[1] = 'b';
$uri_segments[2] = 'c';
#$uri_segments[3] = 'file.php';
/* end called controllers */
$counted = count($uri_segments);
$filled = array();
$i = 0;
do {
if ($i < $counted)
{
$z[] = $uri_segments[$i];
$ez = implode('/', $z);
}
if (file_exists($ez))
{
$uri_result = $ez;
$controller_called = $z[$i];
}
++$i;
} while ($i < $counted);
var_dump($uri_result,$controller_called);
/* RESULTS:
If called $uri_segments[0] to uri_segments[3]
string(14) "a/b/c/file.php" string(8) "file.php"
If called $uri_segments[0] to uri_segments[2]
string(5) "a/b/c" string(1) "c"
*/
【问题讨论】:
-
我不清楚你想在这里实现什么。这部分代码的实际输入是什么?您是否试图根据类名查找要加载的文件?还是基于 URL?为什么需要测试多种可能性?
-
我已经完成了包含控制器类,找到类名结束等。但是,在控制器文件夹中,我想在控制器文件夹中创建包含控制器文件的文件。例如,如果控制器文件夹中不存在文件,则应在 URI uri1/uri2/uri3 uri1 调用的文件夹内搜索没有文件控制器,但在文件夹控制器中找到 uri2 而不是 uri2 是控制器文件。
-
此示例,但不在路由模式下,应在调用之前包含并检查控制器文件 > stackoverflow.com/questions/6529026/…
-
所以你的函数会把 URL 作为输入和文件名作为输出?
-
是的。输入是 $uri_segments 作为由“/”分解的数组。如果存在文件而不是称为控制器,但如果不存在则应检查文件夹内的控制器文件。上面的例子有效,但我认为应该优化和更好的方法,不包括路由。
标签: php model-view-controller path controller include