Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema importazione classi

    ciao!

    scusate ma sto uscendo matto.
    io ho queste due classi dentro alla cartella models:
    codice:
    <?php
    
    
    namespace models;
    
    
    $root = realpath($_SERVER["DOCUMENT_ROOT"]);
    
    
    require "$root/api/lib/vendor/autoload.php";
    
    
    use Illuminate\Database\Eloquent\Model;
    
    
    class Utente extends Model {
      protected $table = 'utenti';
      protected $primaryKey = 'id';
      public $incrementing = true;
      public $timestamps = false;
    
    
      protected $fillable = [
          "u_id",
          "u_email",
          "u_password",
          "u_ruolo",
          "u_attivo",
          "u_data_login",
          "u_data_aggiunta",
          "u_data_modifica",
      ];
    }
    e questa la seconda:
    codice:
    <?php
    
    
    namespace models;
    
    
    $root = realpath($_SERVER["DOCUMENT_ROOT"]);
    
    
    require "$root/api/lib/vendor/autoload.php";
    
    
    use Illuminate\Database\Eloquent\Model;
    
    
    class UtenteModuli extends Model {
      protected $table = 'utenti_moduli';
      protected $primaryKey = 'user_fk,modulo_fk';
      public $incrementing = true;
      public $timestamps = false;
    
    
      protected $fillable = [
          'user_fk',
          'modulo_fk',
          'um_operazione'
      ];
    }
    poi ho questa funzione:
    codice:
    <?php
    
    
    .........
    use models\Utente;
    use models\UtenteModuli;
    
    
    class UtentiController {
      private JwtHelpers $jwtHelpers;
    
    
      public function __construct() {
        $this->jwtHelpers = new JwtHelpers();
    
    
        $ei = new EloquentInit();
        $ei->init();
      }
    
    
      public function login() {
        $data = json_decode(file_get_contents("php://input"), true);
    
    
        if (!empty($data)) {
          $email = trim($data['u_email']);
          $password = $data['u_password'];
    
    
          $query = Utente::query()
              ->where('u_email', '=', $email)
              ->where('u_password', '=', $password)
              ->where('u_attivo', '=', 1)
              ->first();
    
    
          if ($query) {
            $usersModuli = UtenteModuli::query() // --> ERRORE QUI
                ->where('user_fk', '=', $query->id)
                ->join('moduli', 'mod_id', '=', 'modulo_fk')
                ->get();
    
    
    
    
            return json_encode(array(
                "res" => "ok",
                "message" => "Login eseguito correttamente",
                "jwt" => $this->jwtHelpers->createToken(),
                "utente" => $query,
                'moduli' => $usersModuli
            ));
    
    
          } else {
            return json_encode(array(
                "res" => "ko",
                "message" => "Credenziali errate",
            ));
          }
    
    
        } else {
          return json_encode(array(
              "res" => "ko",
              "message" => "Dati mancanti",
          ));
        }
      }
    
    
    }
    mi dice:
    codice:
    <br />
    <b>Fatal error</b>:  Uncaught Error: Class &quot;models\UtenteModuli&quot; not found in /data/vhosts/developmentdb.it/httpdocs/api/controllers/utenti/UtentiController.php: 66
    Stack trace:
    #0 [internal function
    ]: UtentiController-&gt;login()
    #1 /data/vhosts/developmentdb.it/httpdocs/api/controllers/utenti/index.php(38): ReflectionMethod-&gt;invoke()
    #2 /data/vhosts/developmentdb.it/httpdocs/api/index.php(38): include_once('...')
    #3 {main
    }
      thrown in <b>/data/vhosts/developmentdb.it/httpdocs/api/controllers/utenti/UtentiController.php</b> on line <b>66</b><br />
    io però non capisco perchè sono uguali.
    perchè i dice sta cosa sulla seconda classe??

  2. #2
    Quello che ti consiglio di fare è di configurare il composer.json in modo da caricare le tue classi nell'apposito namespace.

    Puoi farlo aggiungendo un elemento in autoload ->psr-4

    codice:
        "autoload": {
            "psr-4": {
                "models\\": "directory/dei/models/"
            }
        },
    Una volta fatto ciò, se esegui un composer dump-autoload avrai le calassi nel namespace models autocaricate da composer.

    A questo punto rimuovi questo codice dalle tue classi:

    Codice PHP:
    $root realpath($_SERVER["DOCUMENT_ROOT"]);
    require 
    "$root/api/lib/vendor/autoload.php"
    E dove usi le classi (ma non nei file delle classi stesse), non fai altro che aggiungere i correti use e includere l'autoload.

    Personalmente eviterei di usare $_SERVER["DOCUMENT_ROOT"] e andrei direttamente con __DIR__ per il require()

  3. #3
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Quello che ti consiglio di fare è di configurare il composer.json in modo da caricare le tue classi nell'apposito namespace.

    Puoi farlo aggiungendo un elemento in autoload ->psr-4

    codice:
        "autoload": {
            "psr-4": {
                "models\\": "directory/dei/models/"
            }
        },
    Una volta fatto ciò, se esegui un composer dump-autoload avrai le calassi nel namespace models autocaricate da composer.

    A questo punto rimuovi questo codice dalle tue classi:

    Codice PHP:
    $root realpath($_SERVER["DOCUMENT_ROOT"]);
    require 
    "$root/api/lib/vendor/autoload.php"
    E dove usi le classi (ma non nei file delle classi stesse), non fai altro che aggiungere i correti use e includere l'autoload.

    Personalmente eviterei di usare $_SERVER["DOCUMENT_ROOT"] e andrei direttamente con __DIR__ per il require()
    grazie per i consigli!
    sembra funzionare tutto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.