【问题标题】:PHP routing a page using the Slim FrameworkPHP 使用 Slim 框架路由页面
【发布时间】:2017-03-20 11:32:26
【问题描述】:

到目前为止,我还没有找到很多与此相关的问题和答案,所以我想我会问这个问题,因为它会极大地帮助我作为初学者学习 PHP 和 Slim 框架。这很简单(我认为)。

所以,我想将我的主页路由到另一个名为 about.php 的页面。我正在使用安装在我的供应商文件夹中的 Slim/Slim 框架。我有一个带有以下代码的 index.php 文件:

<?php

require '/vendor/autoload.php';

$app = new \Slim\Slim();

$app->get('/', function() use($app){
  $app->render('about.php');
});

$app->run();

?>

我还有一个 about.php 文件,它确实存在。

这是我的 composer.json 文件中当前的内容:

 "require": {
    "monolog/monolog": "^1.22",
    "slim/slim": "^3.7",
    "twig/twig": "^1.32",
    "slim/views": "^0.1.3"
    }

当我运行 MAMP(设置以访问我正在处理的项目)查看页面时,它是空白的。谁能帮我理解我做错了什么?

然后我运行了这个(从 require 语句中删除前导 '/',并添加一行来显示错误),它显示了 500 错误:

<?php
ini_set('display_errors', 1);
require 'vendor/autoload.php';

$app = new \Slim\Slim();

$view = $app->view();
$view->parserOptions = array(
'debug' => true

$app->get('/', function() use($app){
  $app->render('about.php'); 
});

$app->run();

?>

【问题讨论】:

  • 你实例化了 Slim PhpRenderer 吗?
  • @rob,我还没有实例化 Slim PhpRenderer。我在 Slim/Slim 或 Slim/Views 下的供应商文件夹中找不到该文件。我需要“要求”另一个包裹吗? (我是初学者,所以也在学习如何谈论php)。
  • 请将ini_set('display_errors', 1); 添加到文件顶部以查看是否有任何错误 - 并且可能尝试删除您的 require 语句中的前导斜杠,我认为这可能是一个问题,因为 php 会尝试从根目录包含
  • 嗨@Daniel,感谢您的建议,我已经从require语句中删除了前导'/'并添加了行(更新了上面的问题以显示代码。我收到500服务器错误. 我的文件正确设置了 index.php 并且没有任何冲突。
  • 看起来我使用的是 slim/slim(2.0 版)而不是 slim/app(我的供应商文件夹中的 3.0 版)。仍在努力,感谢 cmets。

标签: php slim


【解决方案1】:

我不清楚您是否希望 about.php 与您的 Slim 应用程序分开。

即当有人访问 http://example.com/ 时,您是否希望浏览器的 URL 更改为 http://example.com/about.php 其中 about.php 是与您的 index.php 位于同一目录中的完全独立的 PHP 文件?

如果你这样做了,那么你需要重定向:

$app->get('/', function ($request, $response) {
    return $response->withRedirect('/about.php');
});

通常,Slim 用于路由并显示应用程序中的所有页面,在这种情况下,您不会在 URL 中看到 .php。这是因为我们的应用总是运行 index.php 而不管浏览器地址栏中的实际 URL 是什么。

在这种情况下,您可能仍会重定向,但没有 .php:

$app->get('/', function ($request, $response) {
    return $response->withRedirect('/about');
});

您还需要/about 的处理程序,否则 Slim 将不知道该怎么做:

$app->get('/about', function ($request, $response) {
    return $response->write("This is my about page");
});

我们实际上并不倾向于直接在我们的处理程序中编写 HTML。我们使用渲染器。 Slim 项目中有两个:PhpView 和 TwigView。 Skeleton application 显示了 PhpView 版本的工作原理。您可能还会发现文档中的 tutorial 很有用。

最后,如果您看到 500,那么您在某处遇到了 PHP 错误。找到此问题的最简单方法是确保将 php.ini 设置 error_reporting 设置为 E_ALL 并将 display_errors 设置为 On

正如您已经发现的,Slim 3 的主类称为App。您还可以使用以下方法在 Slim 中启用详细的错误显示:

$app = new Slim\App(['settings' => ['displayErrorDetails' => true]]);

同样,通常我们有一个单独的settings.php 文件,其中包含此配置信息,如骨架应用程序中所示。

【讨论】:

  • 这是一个很棒的回复@Rob,非常详细,谢谢 Rob。你帮我解决了这个问题。
猜你喜欢
  • 2014-08-27
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2018-03-08
相关资源
最近更新 更多