2015-09-19 1 views
1

Slim 2, je peux écrire sur la valeur par défaut page 404 facilement,Slim 3 - Comment ajouter un template 404?

// @ref: http://help.slimframework.com/discussions/problems/4400-templatespath-doesnt-change 
$app->notFound(function() use ($app) { 
    $view = $app->view(); 
    $view->setTemplatesDirectory('./public/template/'); 
    $app->render('404.html'); 
}); 

Mais Slim 3,

// ref: http://www.slimframework.com/docs/handlers/not-found.html 
//Override the default Not Found Handler 
$container['notFoundHandler'] = function ($c) { 
    return function ($request, $response) use ($c) { 
     return $c['response'] 
      ->withStatus(404) 
      ->withHeader('Content-Type', 'text/html') 
      ->write('Page not found'); 
    }; 
}; 

Comment puis-je ajouter mon modèle 404 ('404.html') dans ?

Répondre

10

Créer le conteneur:

// Create container 
$container = new \Slim\Container; 

// Register component on container 
$container['view'] = function ($c) { 
    $view = new \Slim\Views\Twig('./public/template/'); 
    $view->addExtension(new \Slim\Views\TwigExtension(
     $c['router'], 
     $c['request']->getUri() 
    )); 
    return $view; 
}; 

//Override the default Not Found Handler 
$container['notFoundHandler'] = function ($c) { 
    return function ($request, $response) use ($c) { 
     return $c['view']->render($response->withStatus(404), '404.html', [ 
      "myMagic" => "Let's roll" 
     ]); 
    }; 
}; 

construire l'objet \Slim\App utilisant le $container et courir:

$app = new \Slim\App($container); 
$app->run(); 
+1

Merci pour la réponse. – laukok

+1

Lorsque vous renvoyez la vue rendue pour notFoundHandler, il est probablement recommandé de définir l'état de la réponse sur 404: $ response-> withStatus (404) – ethet

+0

@ethet Merci pour le commentaire, j'ai mis à jour ma réponse. –

1

Option 1:

utilisation Twig (ou tout autre moteur texturant)

Option 2:

$notFoundPage = file_get_contents($path_to_404_html); 
$response->write($notFoundPage);