Chris Ioannou
Chris Ioannou

Reputation: 17

PHP routing a page using the Slim Framework

I haven't found many questions and answers relating to this so far, so thought I would ask the question as it will greatly help me out as a beginner learning PHP and the Slim framework. It's pretty straightforward (i think).

So, I want to route my home page to another page called about.php. I'm using the Slim/Slim framework which is installed in my vendor folder. And I have an index.php file with the following code:

<?php

require '/vendor/autoload.php';

$app = new \Slim\Slim();

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

$app->run();

?>

I also have an about.php file, which does exist.

This is what's currently in my composer.json file:

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

When I run MAMP (set-up to access the project I am working on) to see the page, it's blank. Can anyone help me understand what I'm doing wrong?

I've then run this (removing the leading '/' from the require statement, and adding a line to display errors), and it displayed a 500 error:

<?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();

?>

Upvotes: 0

Views: 2739

Answers (1)

Rob Allen
Rob Allen

Reputation: 12778

I'm unclear if you want about.php to be separate from your Slim application or not.

i.e. when someone goes to http://example.com/ do you want the browser's URL to change to http://example.com/about.php where about.php is a completely independent PHP file in the same directory as your index.php?

If you do then you need to redirect:

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

More usually, Slim is used to route to and display all pages in your application and in this situation, you wouldn't see the .php in the URL. This is because our app always runs index.php regardless of the actual URL in the the browser's address bar.

In this situation, you would probably still redirect, but without the .php:

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

You would also need a handler for /about otherwise Slim won't know what to do:

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

We don't actually tend to write the HTML directly in our handler though. We use a renderer. There's two in the Slim project: PhpView and TwigView. The Skeleton application shows how the PhpView version works. You may also find the tutorial in the documentation useful.

Finally, if you see a 500, then you have a PHP error somewhere. The easiest way to find this is to ensure that the php.ini setting error_reporting is set to E_ALL and that display_errors is set to On.

As you've already discovered, Slim 3's main class is called App. You can also enable detailed error displays within Slim using:

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

Again, usually we have a separate settings.php file containing this configuration information as shown in the skeleton application.

Upvotes: 1

Related Questions