6
respostas

Class Student não encontrada

Professor eu estou perdido na primeira parte da criação da classe Student, vc explicou, mas me parece que tinha alguma coisa, uma explicação, ou já começa na inserção de alunos?

Obs. já tinha assistido as aulas de instalação, conexão etc...

minha estrutura de arquivos .php, está assim: c:/xamp/htdocs/curso

- vendor
- banco.sqlite
- busca-cursos.php
- composer.json
- composer.lock
-  conexao1.php
- inserir-aluno.php
- Student.php

Fatal error: Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\xampp\htdocs\curso\inserir-aluno.php:11 Stack trace: #0 {main} thrown in C:\xampp\htdocs\curso\inserir-aluno.php on line 11

Student.php

<?php

namespace Alura\Pdo\Domain\Model;

class Student
{
    private ?int $id;
    private string $name;
    private \DateTimeInterface $birth_date;

    public function __construct(?int $id, string $name, \DateTimeInterface $birth_date)
    {
        $this->id = $id;
        $this->name = $name;
        $this->birth_date = $birth_date;
    }

    public function id(): ?int
    {
        return $this->id();
    }

    public function name(): string
    {
        return $this->name;
    }

    public function birth_date(): \DateTimeInterface
    {
        return $this->birth_date;
    }

    public function age(): int
    {
        return $this->birth_date
            ->diff(new \DateTimeImmutable())
            ->y;
    }
}

inserir-aluno.php

<?php

use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$caminhoBanco = __DIR__ . '/banco.sqlite';
$pdo = new PDO('sqlite:' . $caminhoBanco);

$student = new Student(null, 'julia', new \DateTimeImmutable('2010-07-05'));

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}', '{$student->birth_date()->format('Y-m-d')}');";

echo $sqlInsert;

composer.json

{
    "name": "curso/treinamento",
    "description": "projeto treinamento PDO",
    "type": "library",
    "authors": [
        {
            "name": "H3rl3s",
            "email": "herlesp@gmail.com"
        }
    ],
    "require": {
        "guzzlehttp/guzzle": "^7.2",
        "symfony/dom-crawler": "^4.2",
        "symfony/css-selector": "^5.2"
    }
}

conexao1.php

<?php

$caminhoBanco = __DIR__ . 'banco.sqlite';
$pdo = new PDO('sqlite:' . $caminhoBanco);
echo "suusususu:)";

$pdo->exec('CREATE TABLE students (id INTEGER PRIMARY KEY , name TEXT, birth_date TEXT );');
6 respostas

Olá, Herles. Faltou importar a classe do namespace correto com use. ;-)

Boa tarde professor, desculpe a ignorância , mas o problema persistiu, fiz a alteração e mesmo assim olha o erro que apresenta. Por favor peço sua ajuda. lembrando que sou iniciante talvez esse o problema rs.

Fatal error: Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\xampp\htdocs\curso\inserir-aluno.php:11 Stack trace: #0 {main} thrown in C:\xampp\htdocs\curso\inserir-aluno.php on line 11

<?php


use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$caminhoBanco = __DIR__ . '/banco.sqlite';
$pdo = new PDO('sqlite:' . $caminhoBanco);

$student = new Student(null, 'julia', new \DateTimeImmutable('2010-07-05'));

//$student = new Student(null, 'Herles', new \DateTimeImmutable('1981-07-26'));

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}', '{$student->birth_date()->format('Y-m-d')}');";

echo $sqlInsert;

Opa, Herles. Nunca se desculpe por perguntar. :-)

Eu percebi que você não realizou todos os treinamentos que são pré-requisitos desse. Acho que seria o ideal.

Mas mesmo assim, deixa eu tentar te ajudar. Posta o conteúdo do composer.json e da sua classe Student. Mostra também como está sua estrutura de pastas e arquivos, por favor?

Professor eu estou perdido na primeira parte da criação da classe Student, vc explicou, mas me parece que tinha alguma coisa, uma explicação, ou já começa na inserção de alunos?

Obs. já tinha assistido as aulas de instalação, conexão etc...

minha estrutura de arquivos .php, está assim: c:/xamp/htdocs/curso

- vendor
- banco.sqlite
- busca-cursos.php
- composer.json
- composer.lock
-  conexao1.php
- inserir-aluno.php
- Student.php

Fatal error: Uncaught Error: Class "Alura\Pdo\Domain\Model\Student" not found in C:\xampp\htdocs\curso\inserir-aluno.php:11 Stack trace: #0 {main} thrown in C:\xampp\htdocs\curso\inserir-aluno.php on line 11

Student.php

<?php

namespace Alura\Pdo\Domain\Model;

class Student
{
    private ?int $id;
    private string $name;
    private \DateTimeInterface $birth_date;

    public function __construct(?int $id, string $name, \DateTimeInterface $birth_date)
    {
        $this->id = $id;
        $this->name = $name;
        $this->birth_date = $birth_date;
    }

    public function id(): ?int
    {
        return $this->id();
    }

    public function name(): string
    {
        return $this->name;
    }

    public function birth_date(): \DateTimeInterface
    {
        return $this->birth_date;
    }

    public function age(): int
    {
        return $this->birth_date
            ->diff(new \DateTimeImmutable())
            ->y;
    }
}

inserir-aluno.php

<?php

use Alura\Pdo\Domain\Model\Student;

require_once 'vendor/autoload.php';

$caminhoBanco = __DIR__ . '/banco.sqlite';
$pdo = new PDO('sqlite:' . $caminhoBanco);

$student = new Student(null, 'julia', new \DateTimeImmutable('2010-07-05'));

$sqlInsert = "INSERT INTO students (name, birth_date) VALUES ('{$student->name()}', '{$student->birth_date()->format('Y-m-d')}');";

echo $sqlInsert;

composer.json

{
    "name": "curso/treinamento",
    "description": "projeto treinamento PDO",
    "type": "library",
    "authors": [
        {
            "name": "H3rl3s",
            "email": "herlesp@gmail.com"
        }
    ],
    "require": {
        "guzzlehttp/guzzle": "^7.2",
        "symfony/dom-crawler": "^4.2",
        "symfony/css-selector": "^5.2"
    }
}

conexao1.php

<?php

$caminhoBanco = __DIR__ . 'banco.sqlite';
$pdo = new PDO('sqlite:' . $caminhoBanco);
echo "suusususu:)";

$pdo->exec('CREATE TABLE students (id INTEGER PRIMARY KEY , name TEXT, birth_date TEXT );');

Herles, você não tem a configuração de autoload no seu composer.json além de estar com a estrutura de pastas diferente da do treinamento.

Acho que a melhor solução pro seu caso seria fazer todos os treinamentos que são pré requisitos pois neles toda a teoria e prática sobre isso é explicada. Assim a gente garante que nenhuma parte da base do conhecimento fique de fora.

:-)

Herles, você não tem a configuração de autoload no seu composer.json além de estar com a estrutura de pastas diferente da do treinamento.

Acho que a melhor solução pro seu caso seria fazer todos os treinamentos que são pré requisitos pois neles toda a teoria e prática sobre isso é explicada. Assim a gente garante que nenhuma parte da base do conhecimento fique de fora.

:-)