PHP 使用 Slim 框架路由页面
PHP routing a page using the Slim Framework
到目前为止,我还没有找到很多与此相关的问题和答案,所以我想问这个问题,因为它对我作为初学者学习 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();
?>
我不清楚你是否希望 about.php 与你的 Slim 应用程序分开。
即当有人访问 http://example.com/ do you want the browser's URL to change to http://example.com/about.php 时,其中 about.php 是一个完全独立的 PHP 文件,与您的 index.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 shows how the PhpView version works. You may also find the tutorial很有用。
最后,如果您看到 500,则说明某处出现了 PHP 错误。找到它的最简单方法是确保 php.ini 设置 error_reporting
设置为 E_ALL
并且 display_errors
设置为 On
.
正如您已经发现的,Slim 3 的主要 class 称为 App
。您还可以使用以下命令在 Slim 中启用详细的错误显示:
$app = new Slim\App(['settings' => ['displayErrorDetails' => true]]);
同样,通常我们有一个单独的 settings.php
文件,其中包含此配置信息,如骨架应用程序所示。
到目前为止,我还没有找到很多与此相关的问题和答案,所以我想问这个问题,因为它对我作为初学者学习 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();
?>
我不清楚你是否希望 about.php 与你的 Slim 应用程序分开。
即当有人访问 http://example.com/ do you want the browser's URL to change to http://example.com/about.php 时,其中 about.php 是一个完全独立的 PHP 文件,与您的 index.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 shows how the PhpView version works. You may also find the tutorial很有用。
最后,如果您看到 500,则说明某处出现了 PHP 错误。找到它的最简单方法是确保 php.ini 设置 error_reporting
设置为 E_ALL
并且 display_errors
设置为 On
.
正如您已经发现的,Slim 3 的主要 class 称为 App
。您还可以使用以下命令在 Slim 中启用详细的错误显示:
$app = new Slim\App(['settings' => ['displayErrorDetails' => true]]);
同样,通常我们有一个单独的 settings.php
文件,其中包含此配置信息,如骨架应用程序所示。