【发布时间】:2020-09-29 17:12:39
【问题描述】:
我建立了一个 php mvc 框架,这是我的 htaccess 文件。它可以找到,但是,当我回到索引页面后,它找不到默认的平台、控制器和方法,并且其他链接都可以找到,只是索引页面。我尝试在获取值后取消设置默认平台、控制器和方法,但仍然无法正常工作
RewriteEngine on
Options -Indexes
Options -Multiviews
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-l
#RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
RewriteRule ^([a-zA-Z_-]*)/?([a-zA-Z_-]*)?/?([a-zA-Z_-]*)$ index.php?platform=$1&controller=$2&action=$3 [NC,L]
RewriteRule ^([a-zA-Z_-]*)/?([a-zA-Z_-]*)?/?([a-zA-Z_-]*)/?([0-9]*)$ index.php?platform=$1&controller=$2&action=$3&id=$4 [NC,L]
在我的控制器中,url 工作,可以传递参数并打开链接。 我在浏览器中的网址:blog.com/admin/products/list
$id = (int)$_GET['id'];
echo 'i am del';
echo 'my id is :'.$id;
echo '<br>';
echo "<a href='/'>index</a>";
echo '<br>';
echo "<a href='/admin/products/list'>List</a>";
但是当我点击 index,(blog.com) 时,显示消息:致命错误:未捕获的错误:找不到类 '\Controller\Controller';如果可以,它应该像 '\Controller**Admin****ProductsController****list**' 默认平台和控制器和方法消失了; 这是我的 php 文件:
private static function initRoutes()
{
//unset($p);
$p = $_GET['platform'] ?? "Admin";
$c = $_GET['controller'] ?? "Products";
$a = $_GET['action'] ?? "list";
$p = ucfirst(strtolower($p));
$c = ucfirst(strtolower($c));
$a = strtolower($a);
define('PLATFROM_NAME', $p);
define('CONTROLLER_NAME', $c);
define('ACTION_NAME', $a);
define('__URL__', CONTROLLER_PATH . $p . DS);
define('__VIEW__', VIEW_PATH . $p . DS); //view path
}
加载类:
private static function initAutoLoad()
{
spl_autoload_register(function ($class_name) {[enter image description here][1]
$namespace = dirname($class_name);
$class_name = basename($class_name);
if (in_array($namespace, array('Core', 'Lib')))
$path = FRAMEWORK_PATH . $namespace . DS . $class_name . '.class.php';
elseif ($namespace == 'Model')
$path = MODEL_PATH . $class_name . '.class.php';
elseif ($namespace == 'Traits')
$path = TRAITS_PATH . $class_name . '.class.php';
else
$path = CONTROLLER_PATH . PLATFROM_NAME . DS . $class_name . '.class.php';
if (file_exists($path) && is_file($path))
require $path;
});
}
对象:
private static function initDispatch()
{
$controller_name = '\Controller\\' . PLATFROM_NAME . '\\' . CONTROLLER_NAME . 'Controller';
$action_name = ACTION_NAME . 'Action';
$obj = new $controller_name();
$obj->$action_name();
}
【问题讨论】:
-
学习使用 Composer 自带的自动加载器
标签: php .htaccess url-routing spl-autoload-register