Überschreiben Sie eine Laravel 4-Klassen-Kernmethode

Entschuldigung, wenn dies eine blöde Frage ist, da Laravel 4 für mich neu ist. Ich versuche, einige der Methoden in der Kernkennwortfunktion zu überschreiben, da ich meine eigenen Kennwortüberprüfungsregeln definieren (zum Zeitpunkt des Versendens in den Kern fest codiert) und die Methode der Fehlerberichterstattung ändern möchte ($ errors array used on) andere Formen anstatt sitzungsbasiert).

Mein Ansatz war es also, eine neue Klasse in / app / lib / MyProject / User mit dem Namen Password.php zu erstellen, die so aussieht:

<?php namespace MyProject\User;

use Closure;
use Illuminate\Mail\Mailer;
use Illuminate\Routing\Redirector;
use Illuminate\Auth\UserProviderInterface;

    class Password extends \Illuminate\Support\Facades\Password
    {
        /**
     * Reset the password for the given token.
     *
     * @param  array    $credentials
     * @param  Closure  $callback
 * @return mixed
 */
public function reset(array $credentials, Closure $callback)
{
    // If the responses from the validate method is not a user instance, we will
    // assume that it is a redirect and simply return it from this method and
    // the user is properly redirected having an error message on the post.
    $user = $this->validateReset($credentials);

    if ( ! $user instanceof RemindableInterface)
    {
        return $user;
    }

    $pass = $this->getPassword();

    // Once we have called this callback, we will remove this token row from the
    // table and return the response from this callback so the user gets sent
    // to the destination given by the developers from the callback return.
    $response = call_user_func($callback, $user, $pass);

    $this->reminders->delete($this->getToken());

    return $response;
}

}

Ich habe die Rücksetzmethode von /vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php kopiert, wo sich die Kern-Passwort-Fassade anscheinend auflöst.

Dann habe ich in meiner composer.json-Datei Folgendes zum automatischen Laden hinzugefügt: classmap array:

"app/lib/MyProject/User"

Schließlich habe ich in meiner Datei /app/config/app.php den Kennwortalias geändert:

'Password' => 'MyProject\User\Password',

OK. In meiner routes.php-Datei habe ich Folgendes, was so ziemlich direkt aus den Dokumenten entnommen ist:

Route::post('password/reset/{token}', function()
{
    $credentials = array('email' => Input::get('email'));

    return Password::reset($credentials, function($user, $password)
    {
        $user->password = Hash::make($password);

        $user->save();

        return 'saved - login';
    });
});

Wenn diese reset () -Methode ausgeführt wird, wird der folgende Fehler angezeigt:

Nicht statische Methode MyProject \ User \ Password :: reset () sollte nicht statisch aufgerufen werden

Die reset () -Methode in der Klasse, die ich erweitere, ist nicht statisch, was mich jedoch überrascht hat, wenn ich meine reset-Methode auf statisch setze, wird dieser Fehler gelöscht. Als nächstes erhalte ich jedoch den folgenden Fehler:

Verwenden von $ this, wenn es sich nicht im Objektkontext befindet

Was kommt, wenn versucht wird, $ this-> validateReset ($ credentials) auszuführen.

Ich bin jetzt völlig außer meiner Tiefe. Bin ich dabei auf dem richtigen Weg oder auf dem falschen Weg?

Danke für jeden Rat

Antworten auf die Frage(2)

Ihre Antwort auf die Frage