You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP MVC架构中public目录静态文件无法加载问题求助

PHP MVC架构静态文件加载异常求助

public目录下的css、js、img等静态文件仅在首页正常加载,其他页面调用时均失效。已通过php -S localhost:8080在public目录启动项目,尝试修改静态文件路径、添加.htaccess文件均无法解决问题,特此求助。

项目结构

  • core
    • Router.php
  • http
    • controllers
      • index.php
  • public
    • css
    • js
    • img
    • index.php
  • views
  • routes.php

关键文件代码

public/index.php

<?php

use Core\Router;

const BASE_PATH = __DIR__ . '/../';

session_start();

require BASE_PATH . 'vendor/autoload.php';
require BASE_PATH . 'Core/functions.php';
require BASE_PATH . 'bootstrap.php';

$router = new Router();

require BASE_PATH . 'routes.php';


$uri = parse_url($_SERVER['REQUEST_URI'])['path'];
$method = $_POST['_method'] ?? $_SERVER['REQUEST_METHOD'];

try {
    $router->route($uri, $method);
} catch (Exception $e) {
    echo $e->getMessage();
}

core/Router.php

<?php

namespace Core;

use Core\Middleware\Middleware;
use Exception;
use JetBrains\PhpStorm\NoReturn;

class Router
{
    protected array $routes = [];

    public function get($uri, $controller): void
    {
        $this->add('GET', $uri, $controller);
    }

    public function add($method, $uri, $controller): static
    {
        $this->routes[] = [
            'uri' => $uri,
            'controller' => $controller,
            'method' => $method,
            'middleware' => null
        ];

        return $this;
    }

    public function post($uri, $controller): void
    {
        $this->add('POST', $uri, $controller);
    }

    public function delete($uri, $controller): static
    {
        return $this->add('DELETE', $uri, $controller);
    }

    public function patch($uri, $controller): static
    {
        return $this->add('PATCH', $uri, $controller);
    }

    public function put($uri, $controller): static
    {
        return $this->add('PUT', $uri, $controller);
    }

    public function only($key): static
    {
        $this->routes[array_key_last($this->routes)]['middleware'] = $key;

        return $this;
    }

    /**
     * @throws Exception
     */
    public function route($uri, $method)
    {
        foreach ($this->routes as $route) {
            if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) {
                Middleware::resolve($route['middleware']);

                return require base_path('Http/controllers/' . $route['controller']);
            }
        }

        $this->abort();
    }

    #[NoReturn] protected function abort($code = 404): void
    {
        http_response_code($code);

        require base_path("views/{$code}.php");

        die();
    }

    public function previousUrl()
    {
        return $_SERVER['HTTP_REFERER'];
    }

}

routes.php

<?php
/** @var Router $router */

use Core\Router;

$router->get('/', 'index.php');
$router->get('/contact', 'contact.php');
$router->get('/about', 'about.php');
$router->get('/service', 'service.php');
$router->get('/menu', 'menu.php');
$router->get('/team', 'team.php');
$router->get('/testimonial', 'testimonial.php');
$router->get('/booking', 'booking/booking.php');

$router->get('/register', 'register/create.php');
$router->get('/login', 'session/create.php');

$router->get('/cart', 'cart/index.php');

内容的提问来源于stack exchange,提问作者Mohye Mahmoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:05:24