Bonjour,
Voila je rencontre un petit problème avec mon code.
dans mon index.php j'ai ceci
<?php
require '../vendor/autoload.php';
$app = new \Framework\App();
$response = $app->run(\GuzzleHttp\Psr7\ServerRequest::fromGlobals());
\Http\Response\send($response);
et dans mon App.php j'ai ceci
<?php
namespace Framework;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class App
{
public function run(ServerRequestInterface $request): ResponseInterface
{
$uri = $request->gerUri()->getPath();
if (!empty($uri) && $uri[-1] === "/")
{
return = (new Response())
->withStatus(code: 301)
->withHeader(header: 'Location', substr($uri, start: 0, lenght: -1));
}
if ($uri === '/blog')
{
return new Response(status 200:, [], body: '<h1>Bienvenue sur le blog</h1>');
}
return new Response(status 404:, [], body: '<h1>Erreur 404, la page est introuvable</h1>');
return $Response;
}
}
Ce bout de code est sensé m'afficher à l'écran 'Bonjour' quand je tape 'locahost:8000/blog'
Or ce que j'obtiens actuellement c'est le message d'erreur suivant :
Fatal error: Uncaught Error: Class 'Framework\App' not found in C:\wamp64\www\OC_P3_Blog_Ecrivain\MonFramework\public\index.php:5 Stack trace: #0 {main} thrown in C:\wamp64\www\OC_P3_Blog_Ecrivain\MonFramework\public\index.php on line 5
Est ce que quelqu'un pourrait m'aider ?
Tu as bien init composer et créé la partie autoload psr-4 qui correspond à ton namespace et dossier ?
Bonjour.
Ce serait bien que tu évites de recopier le visuel d'aide de ton IDE, comme par exemple :
return = (new Response())
->withStatus(code: 301)
->withHeader(header: 'Location', substr($uri, start: 0, lenght: -1));
code: et header: c'est ton IDE qui les affiche, donc évites de les reproduire dans le code que tu nous montre.
Il est totalement inutile de faire deux retours l'un à la suite de l'autre étant donné que le second ne sera jamais effectué :
return new Response(status 404:, [], body: '<h1>Erreur 404, la page est introuvable</h1>');
return $Response; // Celui-ci ne sera jamais effectué étant donné que tu en a un juste avant,
// de plus que tu n'as aucune variable nommé "Response" de défini dans ton code.
Sinon est-ce que tu as bien le namespace
Framework défini dans ton fichier composer.json et qui pointe dans le bon dossier ?
Car de toute évidence, vu l'erreur qui est retournée, l'autoloader ne trouve pas ta classe App, ou alors c'est que tu as mal placé le fichier de ta classe App.
Salut Lartak
Merci pour tes lumières.
J'ai en effet changer le namespace et maintenant j'ai une autre erreur sur les lignes 17 et 18.
return = (new Response())
->withStatus(code: 301)
->withHeader(header: 'Location', substr($uri, start: 0, lenght: -1));
Si je comprends ce que tu m'écris je dois supprimer les occurences "code" et "header" ?
Merci d'avance d'aider un gros nul de débutant comme moi ;-)
Xerius
Si je comprends ce que tu m'écris je dois supprimer les occurences "code" et "header" ?
En effet, quand tu copies le code ici, tu ne dois pas retranscrire les libellé d'aide de ton IDE.
J'ai en effet changer le namespace et maintenant j'ai une autre erreur sur les lignes 17 et 18.
Si tu ne nous montres pas le message d'erreur il va nous être difficile de t'aider à la résoudre.
Bon j'ai essayé tout ça mais une fois cette solution passé j'ai d'autres problèmes
j'ai donc décidé de reprendre le tuto minute par minute
et je dois être une chèvre car au bout de 5 min j'ai déjà pas le même résultat
en effet voici le contenu de mon fichier index.php
<?php
require '../vendor/autoload.php';
$app = new \Framework\App();
$App->run();
puis celui de ma classe App.php
<?php
namespace Framework;
class App
{
public function run()
{
echo 'Bonjour';
}
}
et le résultat que j'obtiens à l'écran :
Fatal error: Uncaught Error: Class 'Framework\App' not found in C:\wamp64\www\MyFramework\public\index.php:5 Stack trace: #0 {main} thrown in C:\wamp64\www\MyFramework\public\index.php on line 5
je crois que je vais arrêter le PHP et aller vendre des chouchoux sur la plage cet été...
Au secours.
{
"name": "mon-framework",
"description": "blog",
"authors": [
{
"name": "Jeff Chevasson",
"email": "jchevasson@gmail.com"
}
],
"autoload": {
"psr-4": {
"Framework\\": "src/Framework"
}
},
"require-dev": {
"phpunit/phpunit": "^8"
},
"require": {
"squizlabs/php_codesniffer": "*"
}
}
oui et je ne vois toujours pas ce qui ne fonctionne pas. d'ailleurs tu peux voir le namespace dans le fichier que j'ai collé plus haut