Bonjour à toutes et à tous,
Je commence l'apprentissage du framwork Slim3 et je suis donc en train de faire le tuto sur Slimframework 3 de Grafikart.
Mon problème intervient avec Twig View.
Lorsque je l'instancie dans le fichier container.php j'obtient l'erreur suivantes :
fatal error : class Slim\View not found in C:\......vendor\slim\views\Twig.php on line 45
Le fichier Twig.php est bien présent dans le vendor\slim\view.
J'ai updaté avec composer au moins 10 fois :).
J'ai googlé cette erreur sur différents forums, et je ne trouve aucunes réponses...mon code a une erreur mais impossible à trouver...
Je vous donne mes tests.
Config server : Wamp>PHP 5.6 ou 7.
Mon arborescence fichiers
app
Controllers
PagesController.php
views
pages
home.twig
container.php
public
index.php
index.php:
<?php
require '../vendor/autoload.php';
$app = new \Slim\App([
'settings' => [
'displayErrorDetails' => true
]
]);
require '../app/container.php';
$app->get('/', \App\Controllers\PagesController::class.':home');
$app->run();
?>
JSON :
{
"name": "ex/d",
"description": "test",
"require": {
"symfony/yaml": "^3.3",
"php": ">=5.6",
"slim/slim": "3.1",
"twig/twig": "^1.23",
"slim/views": "^0.1.3",
"slim/csrf": "0.8.*",
"slim/twig-view": "^2.2"
},
"autoload" :{
"psr-4" : {"App\\" : "app/"}
},
"minimum-stability": "beta"
}
Container.php :
<?php
$container = $app->getContainer();
$container['view'] = function ($container) {
$dir = dirname(__DIR__); /
var_dump($dir);
$view = new \Slim\Views\Twig($dir.'/app/views', [
'cache' => false //$dir.'/tmp/cache'
]);
var_dump($view);
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));
return $view;
};
?>
PagesController.php :
<?php
namespace App\Controllers;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class PagesController
{
private $container;
public function __construct($container)
{
$this->container = $container;
}
public function home(RequestInterface $request, ResponseInterface $response)
{
//return $response->getBody()->write('hello');
$this->container->view->render($response, 'pages/home.twig');
}
}
?>
S'il vous manque des éléments je vous les donnent volontier !
Merci à ceux qui pourront m'aider :)
Salut, pour commencer je te conseil de virer le twig/twig
de composer, slim/twig-view
gère ça tout seul et si tu souhaite avoir la version 1 de twig (pour php5), il te suffit de mettre ceci pour bloqué la version "slim/twig-view": "2.1.*"
.
Pour ton problème, voici mon code pour twig dans mon container:
$container['view'] = function ($container) {
$pathView = dirname(dirname(__DIR__));
if(CACHE === true){
$cache = $pathView.'/cache';
}elseif(CACHE === false){
$cache = false;
}
$view = new \Slim\Views\Twig($pathView.'/app/views', [
'cache' => $cache
]);
$basePath = rtrim(str_ireplace('index.php', '', $container['request']->getUri()->getBasePath()), '/');
$view->addExtension(new Slim\Views\TwigExtension($container['router'], $basePath));
return $view;
};
Je viens juste de finir le tuto de grafikart sur slim, j'ai fait mon propre template basé sur le sien avec divers librairies, je le mettrai sur github un moment donné si tu le souhaite :)
PS: En quoi tu as besoin de slim/views
dans composer ?
Hello !
Merci pour ta réponse !
J'ai viré "Twig/Twig" et "php": ">=5.6" et sa marche ;).
Est-ce que la version de PHP ne permettait pas la lecture des namespaces...?!
J'espère que ça pourras aider d'autres personnes.
PS: En quoi tu as besoin de slim/views dans composer ?
-> Pour tester :)
Encore merci pour ton aide.
a+
PS : Où est ce que je peut passer la discussion en RESOLU ?
@UnUser, la version php 5.6 peut lire les namespaces je te rassure, mais le problème viens sans doute d'une des libs que tu avais ajouter au composer, une erreur de lecture de ton container ? Je ne sais pas trop :/
En tout cas, content d'avoir pu t'aider ^^
Si jamais ça interresse quelqu'un => https://github.com/Fukotaku/fufu