Bonjour à tous ,
Je me permet de vous solicité de nouveaux car j'ai un problème. Voila toujours en suivant la formations PHP de Grafikart, je rencontre un problème , je souhaite gérer moi même la création de compte utilisateur sur mon site web le but étant que l'orsque je les inscrits je leurs génère un mot de passe aléatoire qu'il reçoivent par mail et qu'il puisse par la suite le changer eux même. Enfin bon sa c'est une autre histoire.

Comme base de code j'ai repris le même principe que Grafikart donne pour créer une catégorie qu'ensuite j'ai mis à ma sauce concernant les champs voici le code de la page new.php (user)

<?php
use App\Auth;
use App\HTML\Form;
use App\Connection;
use App\Model\User;
use App\ObjectHelper;
use App\Table\UserTable;
use App\Validators\UserValidator;

Auth::check();
$title = "Créer un utilisateur | Administration ";

$item = new User();
$errors = [];
$fields =['username','password','email','role'];

if(!empty($_POST)){
        if (!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['role'])){
            $errors['password'] = ['Vous devez saisir un identifiant ou mot de passe correcte pour poursuivre l\'inscription'];
            $password = $_POST['password'];
            $p_mail =$_POST['password'];
            $p = password_hash($password, PASSWORD_DEFAULT);
            $_POST['password'] = $p ;
            $pdo = Connection::getPDO();
            $table = new UserTable($pdo);
            $v = new UserValidator($_POST, $table);
            ObjectHelper::hydrate($item, $_POST, $fields);
            //dd($_POST);
        if ($v->validate()) {
            $table->create([
                'username' => $item->getUsername(),
                'password' => $item->getPassword(),
                'email' => $item->getEmail(),
                'role' => $item->getRole()
            ], $item->getID());
            header('Location:' . $router->url('admin_users'));
            exit();
        } else {
            $errors = $v->errors();
        }
    }
}
$form = new Form($item, $errors);

?>

Or j'obtiens une erreur :

 TypeError
Return value of App\Model\User::getId() must be of the type int or null, string returned

Alors que justement l'orsque je débug je n'envoie aucun champs "id" puisque l'id en tant normal sera créer dans la bdd avec l'autoicrément de celle-ci.

Voici mon model user.php au cas ou sa pourrait mieux vous éclairer que moi.

    public function setPassword(string $password): self
    {
        $this->password = $password;

        return $this;
    }

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

    public function setId($id): self
    {
        $this->id = $id;

        return $this;
    }

Si quelqu'un aurait-une idée , merci d'avance.
J'ai dèja une piste , si j'enlève le champs "Role" l'utilisateur se créer sans soucis....

3 réponses


Sabrus
Réponse acceptée

$this->id te retourne un string voir peut entre en le convertissant en int:
return (int)$this->id;

gwadas
Auteur

Personne aurait une idée ou une piste ?
Merci d'avance

gwadas
Auteur

Bonjour ,
Merci Sabrus!!!! Grâce a toi cela a débloquer ma situation , et j'ai pu m'appercevoir qu'en essayant de débug j'ai glisser des erreurs de frappe.
Le système fonctionne désormais :)