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

    Decorator/attributi personalizzati in una funzione

    ciao!

    cerco di spiegarmi.
    avrei bisogno di aggiungere una annotazione/decorator/attributo ad una funzione che mi indica se quella funzione può essere richiamata solo se si è autorizzati.
    quindi quando richiamo quella funzione devo controllare l'annotazione/decorator/attributo ed in caso sia settato a true inviare un messaggio all'utente (o fare altro, da verificare).

    facendo uno pseudo esempio:
    codice:
    class TestController {
    
    
      [Auth=false]
      public function getAll() {
        echo 'ciao!';
      }
      
      [Auth=true]
      public function get() {
        echo 'ciao!';
      }
    
    
    }
    come posso ottenere una cosa del genere??

  2. #2
    Puoi provare a usare gli attributi:
    https://www.php.net/manual/en/langua...s.overview.php

    Anche se, personalmente, metterei la logica a livello di route piuttosto che di controller (es. come fa Laravel)

  3. #3
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Puoi provare a usare gli attributi:
    https://www.php.net/manual/en/langua...s.overview.php

    Anche se, personalmente, metterei la logica a livello di route piuttosto che di controller (es. come fa Laravel)
    ciao!
    si adesso ce l'ho a livello di route infatti.
    però volevo provare questa strada per alcune funzioni specifiche!

    grazie mi guardo il link!

  4. #4
    non ho trovato proprio easy capire come funzionano gli attribute.
    cmq ecco un esempio basico, penso partirò da qui per quel che mi serve:
    codice:
    #[Attribute]
    class CheckProtectedAttribute {
      private string $isProtected;
    
    
      public function __construct(string $isProtected) {
        $this->isProtected = $isProtected;
      }
    }
    
    
    class Foo {
      #[CheckProtectedAttribute('true')]
      public function funcProtetta() {
        echo 'protetta';
      }
    
    
      #[CheckProtectedAttribute('false')]
      public function funcNonProtetta() {
        echo 'non protetta';
      }
    
    
    }
    
    
    $reflector = new \ReflectionClass(Foo::class);
    $methods = $reflector->getMethods();
    
    
    foreach ($methods as $method) {
      foreach ($method->getAttributes() as $attr) {
        foreach ($attr->getArguments() as $arg) {
          if ($arg === 'true') {
            echo '-ESEGUIRE IL LOGIN-';
          } else {
            $reflectionMethod = new ReflectionMethod('Foo', $method->getName());
            $reflectionMethod->invoke($reflector->newInstance());
          }
        }
        echo '<hr>';
      }
    }

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.