Formation POO en PHP

Default
,

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 que je veux

Ce bout de code est sensé m'afficher à l'écran 'Bonjour' quand je tape 'locahost:8000/blog'

Ce que j'obtiens

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 ?

9 Réponse

45633
,

Tu as bien init composer et créé la partie autoload psr-4 qui correspond à ton namespace et dossier ?

17162
,

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.

Default
,

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

17162
,

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.

Default
,

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.

109584
,

Salut montre nous ton fichier composer.json

Default
,

{
"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": "*"
}

}

109584
,

Dans le fichier de ta class App tu à bien mis le namespace Framework ?

Default
,

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