gpt4 book ai didi

php - Slim框架的路由问题

转载 作者:行者123 更新时间:2023-12-02 21:17:43 39 4
gpt4 key购买 nike

我刚刚开始使用 Slim。我目前的申请是这样的:

<?php

require 'vendor/autoload.php';

$app = new \Slim\Slim([
'debug' => true
]);

var_dump($app->request());

$app->get('/:name', function ($name) {
echo "Hello, $name";
});

$app->get('/', function () {
echo 'hello world';
});

$app->run();

我使用内置 Web 服务器的 PHP 在本地主机上运行它。对于我在浏览器(或 Postman 或 CURL)中尝试的每个请求,我得到的始终是“hello world”,就好像没有考虑第一条路线一样。此外,如果我删除第二条路由,我总是会得到 404。

我是不是忘记了什么?

出于调试目的,SLIM 使用哪个 HTTP header 来确定路由?

最佳答案

您无法删除第二条路由$app->get('/'),因为它是Home默认路由,并且由于$app而获得404是很正常的->get('/:name', function ($name) {}) 期望回调函数的参数 'name' 丢失。

您是否正在尝试以下操作:

http://localhost/mysite/  --- Outputs Hello World
http://localhost/mysite/marcosh --- Outputs a 404 ??

如果是这种情况,那么正如 a77icus5 所建议的那样,我们可能需要查看您的 htacess 文件以及项目目录结构是什么......

我有一个新鲜的Slim Skeleton安装,我想与您分享我的配置...

我的Web项目目录如下:

Webroot
-htaccess
- public
-- htaccess
-- assets
--- js
--- css
- templates
- app
- vendor
-- Slim
-- Twig

在位于项目根目录的第一个 .htaccess 中,我添加了:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

此处 public 与应用公共(public)文件夹的名称匹配

然后在位于公共(public)文件夹的 .htaccess 中添加:

<IfModule mod_php5.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>

然后在 SLIM -> Environment.php(第 142 行 - 虚拟路径)中尝试进行如下编辑:

  // Virtual path
// $env['PATH_INFO'] = substr_replace($requestUri, '', 0, strlen($physicalPath)); // <-- Remove physical path
$env['PATH_INFO'] = str_replace(str_replace('/public', "", dirname($_SERVER['PHP_SELF'])), '', "/".$requestUri); // remove public from URI
$env['PATH_INFO'] = str_replace('?' . $queryString, '', $env['PATH_INFO']); // <-- Remove query string
$env['PATH_INFO'] = '/' . ltrim($env['PATH_INFO'], '/'); // <-- Ensure leading slash

关于php - Slim框架的路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594685/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com