提问人:Mohye Mahmoud 提问时间:10/13/2023 最后编辑:Mohye Mahmoud 更新时间:11/22/2023 访问量:39
公共文件夹中的静态文件在 PHP MVC 架构中不起作用
static files inside public folder not working in PHP MVC Archteicture
问:
我的项目结构
核心
路由器.php
HTTP的
控制器
索引:.php
公共
CSS的
js
IMG的
索引:.php
视图
路由:.php
索引 .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();
}
路由器:.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'];
}
}
路由:.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');
当我调用它们时,公用文件夹中存在的所有静态文件和库在项目的其他页面中都不起作用。
我使用 php -S lcoalhost:8080 在公共文件夹中运行该项目
我尝试更改静态文件的路径,但它不起作用,我也尝试将 .htaccess 添加到项目中,但也不起作用
答:
0赞
tereško
11/22/2023
#1
那是因为你 php 内置的“服务器”不是真正的服务器(因为缺乏更好的描述)。您应该学习如何使用 docker 设置 nginx/fpm 服务器。
Buuut,简而言之,您可以创建一个单独的文件,该文件尝试加载现有文件,然后再对 .index.php
将服务器初始化命令更改为如下所示:
php -S 127.0.0.1:8080 ./public/built-in.php
有点像这个练习(它有点过时了,但应该解释这个想法)。
评论