Ergebnis 1 bis 10 von 10

Thema: Wie BackendUser in einem Callback abrufen

  1. #1
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard Wie BackendUser in einem Callback abrufen

    Früher konnte ich über
    PHP-Code:
    $this->import('BackendUser''User'); 
    auf den aktuellen Backend-Nutzer zugreifen und beispielsweise den Nutzernamen abrufen. Dies funktionier in Contao 5 ja leider nicht mehr.

    Ich versuche es aktuell in einem meiner DCAs wie in einem Beispiel aus den Docs:

    PHP-Code:
    use Contao\BackendUser;
    use 
    Contao\FrontendUser;
    use 
    Symfony\Component\Security\Core\Security;

    class 
    Example
    {
        private 
    $security;

        public function 
    __construct(Security $security)
        {
            
    $this->security $security;
        }

        public function 
    myfunction()
        {
            
    // Get current back end user
            
    if (($user $this->security->getUser()) instanceof BackendUser) {
                
    // …
            
    }
        }

    Allerdings schmeißt er mir hier nur eine Fehlermeldung mit "Too few arguments" aus.
    Wie komme ich aktuell am einfachsten an den BackendUser?
    Geändert von Spooky (10.01.2024 um 09:02 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    457

    Standard

    Zitat Zitat von waldo Beitrag anzeigen
    Früher konnte ich über
    Allerdings schmeißt er mir hier nur eine Fehlermeldung mit "Too few arguments" aus.
    Wie komme ich aktuell am einfachsten an den BackendUser?
    Bevor Spooky es sagt:

    Nutze den Debug-Modus und poste den Stack-Trace (Sollte uns helfen)

  3. #3
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Kein Problem

    PHP-Code:
    ArgumentCountError:
    Too few arguments to function tl_products::__construct(), 0 passed in /var/www/vhosts/vendor/contao/core-bundle/contao/library/Contao/System.php on line 248 and exactly 1 expected

      at dev
    /src/Resources/contao/dca/tl_products.php:399
      at tl_products
    ->__construct()
         (
    vendor/contao/core-bundle/contao/library/Contao/System.php:248)
      
    at Contao\System::importStatic()
         (
    vendor/contao/core-bundle/contao/classes/DataContainer.php:1728)
      
    at Contao\DataContainer->generateRecordLabel()
         (
    vendor/contao/core-bundle/contao/drivers/DC_Table.php:5242)
      
    at Contao\DC_Table->listView()
         (
    vendor/contao/core-bundle/contao/drivers/DC_Table.php:380)
      
    at Contao\DC_Table->showAll()
         (
    vendor/contao/core-bundle/contao/classes/Backend.php:548)
      
    at Contao\Backend->getBackendModule()
         (
    vendor/contao/core-bundle/contao/controllers/BackendMain.php:146)
      
    at Contao\BackendMain->run()
         (
    vendor/contao/core-bundle/src/Controller/BackendController.php:44)
      
    at Contao\CoreBundle\Controller\BackendController->mainAction()
         (
    vendor/symfony/http-kernel/HttpKernel.php:181)
      
    at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
         (
    vendor/symfony/http-kernel/HttpKernel.php:76)
      
    at Symfony\Component\HttpKernel\HttpKernel->handle()
         (
    vendor/symfony/http-kernel/Kernel.php:197)
      
    at Symfony\Component\HttpKernel\Kernel->handle()
         (
    web/index.php:44

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Wie hast du den Callback registriert?
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Registriert? Mir war ehrlich gesagt nicht bewusst, dass dieser separat registriert werden muss. Auf der Docs Seite, an die ich mich gehalten habe konnte ich dazu nichts finden.
    Wie genau muss ich diesen registrieren?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Irgendwie musst du ihn bereits registriert haben, sonst würde er ja gar nicht aufgerufen werden (und dann gäbe es auch keinen Fehler). Wie man DCA Callbacks registriert ist hier beschrieben: https://docs.contao.org/dev/framewor...kable-services
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Ah! Da hab ich dich missverstanden. Der Callback gehört zu einer Operation meines DCAs:

    PHP-Code:
        'operations' => array
        (
          
    'toggle' => array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_products']['toggle'],
                    
    'icon'                => 'visible.svg',
                    
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"',
                    
    'button_callback'     => array('tl_products''toggleIcon')
                )
        ) 
    Die Funktion sieht in meinem DCA aktuell so aus:

    PHP-Code:
    class tl_products extends Backend
    {

      private 
    $security;

      public function 
    __construct(Security $security)
      {
          
    $this->security $security;
      }

      public function 
    toggleIcon(TokenInterface $token$row$href$label$title$icon$attributes)
      {
        
    $user $this->security->getUser();

        if (
    strlen($this->Input->get('tid'))) {
          
    $this->toggleVisibility($this->Input->get('tid'), ($this->Input->get('state') == 0));
          
    $this->redirect($this->getReferer());
        }

        
    $href .= '&id='.$this->Input->get('id').'&tid='.$row['id'].'&state='.$row[''];

        if (!
    $row['published']){
          
    $icon 'invisible.gif';
        }

        return 
    '<a href="'.$this->addToUrl($href).'" title="'.specialchars($title).'"'.$attributes.'>'.$this->generateImage($icon$label).'</a> ';
      }
    ...


  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Du musst dich an die Dateipfade und Namespaces aus der Dokumentation halten und den Callback so wie in der Dokumentation beschrieben registrieren, wenn du Dependency Injection nutzen möchtest.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    02.12.2017.
    Beiträge
    140

    Standard

    Wie genau würde das in meinem Fall aussehen?

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Du möchtest einen list.operations.<OPERATION>.button Callback, da befindet sich in der Dokumentation ein Beispiel, welches du kopieren könntest (deinen bestehenden Callback musst du natürlich komplett aus deiner DCA Datei löschen).
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •