PHP使用Slim Framework路由页面

时间:2017-03-20 11:32:26

标签: php slim

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

所以,我想将我的主页路由到另一个名为about.php的页面。我使用的是Slim / Slim框架,它安装在我的vendor文件夹中。我有一个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语句中删除前导&#39; /&#39;并添加一行显示错误),并显示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();

?>

1 个答案:

答案 0 :(得分: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_ALLdisplay_errors设置为On

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

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

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