2017-03-10 2 views
2

Ich benutze OctoberCMS basierend auf Laravel.OctoberCMS Wie Überschreiben Benutzer Plugin onRegister() Funktion?

Ich versuche, die Users PluginonRegister() Funktion zu übersteuern.

A previous answer helped me extend the plugin.

Ich möchte Benutzernamen beschränken nur mit alpha_dash und Begrenzung auf 50 Zeichen alphanumerisch.

Die ursprüngliche Funktion in Account.php

public function onRegister() 
{ 
... 
    if ($this->loginAttribute() == UserSettings::LOGIN_USERNAME) { 
     $rules['username'] = 'required|between:2,255'; 
    } 

Mein Aufschalten

Benutzer Ereignisse docs https://github.com/rainlab/user-plugin#events

public function boot() { 

    \RainLab\User\Models\User::extend(function($model) { 

     $model->bindEvent('model.beforeUpdate', function() use ($model) { 

      # User Register 
      \Event::listen('rainlab.user.register', function($user, $data) { 

       if ($this->loginAttribute() == UserSettings::LOGIN_USERNAME) { 
        $rules['username'] = 'required|alpha_dash|between:2,50'; 
       } 

      }); 
     }); 
    }); 
} 

Fehler

"Call to undefined method [loginAttribute]" 

Wenn ich die if-Anweisung und loginAttribute und verwenden Sie nur $ Regeln [ ‚username‘] zu entfernen, bin ich noch in der Lage mit nicht-alphanumerischen Zeichen-Namen zu registrieren.

Ich war in der Lage, neuen Code mit diesem zu erweitern, aber nicht vorhandenen Code zu überschreiben.

Antwort

4

Ich glaube nicht, dass Sie den Seitenzyklus hier verstehen.

rainlab.user.register heißt nach der Benutzer wurde bereits registriert. I.e. Sie haben die Validierung bereits bestanden und sind bereits mit dem ungültigen Benutzernamen vorhanden.

Was können Sie stattdessen tun, um die model.beforeSave Veranstaltung User-Modell binden und machen Sie Ihre eigene Validierung des Benutzername:

public function boot() { 

    \RainLab\User\Models\User::extend(function($model) { 

     $model->bindEvent('model.beforeSave', function() use ($model) { 
      $validator = \Validator::make($model->attributes, [ 
       'username' => 'required|alpha_dash|between:2,50', 
      ]); 

      if ($validator->fails()) { 
       throw new \ValidationException([ 
        'username' => 'Username must contain alphanumeric values only, and be between 2 and 50 characters in length', 
       ]); 
      } 
     }); 

    }); 

} 
+0

Jetzt funktioniert es perfekt. –

Verwandte Themen