使用内置PHP服务器通过Slim Application v3提供静态文件

时间:2019-03-09 23:25:14

标签: php slim

我正在使用Slim框架开始一个新项目。到目前为止,一切都进展顺利,我正在微型框架中寻找的所有内容。我已经离开PHP世界已有一段时间了,所以现在我逐渐了解了内置的PHP Web服务器。唯一的问题是:我该如何投放我的静态内容?

作为参考,这是我的项目布局:

project:
    public folder
        index.php
        static/css/style.css
        templates/index.html .  # I'm using twig (coming from python Flask)

我的模板:

<html>
    <link href="{{ base_url() }}/css/agency.css" rel="stylesheet">  
    <!-- other cool layout stuff -->

和我的index.php(非常小)

require 'vendor/autoload.php'; 
$app = new \Slim\App();      
$app->get('/', function ($request, $response, $args) {
    $response = $this->view->render($response, 'base.html');
    return $response->write("Hello ");    
});
$app->run();

当我从命令行启动内置的php服务器时,我会这样做:

php -S localhost:8080 -t public public/index.php

虽然效果很好,但是当我尝试访问静态内容时,它只是返回呈现的base.html文件

请让我知道开始此操作的最佳方法,以便正确显示静态内容。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

因此,根据kuh-chan和Nima指出的文档,我将其扩展为实现Slim目的,并在文件不存在时返回404响应。

if (PHP_SAPI == 'cli-server') {

    $url  = parse_url($_SERVER['REQUEST_URI']);
    $file = __DIR__ . $url['path'];

    // check the file types, only serve standard files
    if (preg_match('/\.(?:png|js|jpg|jpeg|gif|css)$/', $file)) {
        // does the file exist? If so, return it
        if (is_file($file))
            return false;

        // file does not exist. return a 404
        header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
        printf('"%s" does not exist', $_SERVER['REQUEST_URI']);
        return false;
    }
}