Извините, если это глупый вопрос, поскольку многие из Laravel 4 для меня новы. Я пытаюсь переопределить несколько методов в функциональности основного пароля, так как я хочу определить свои собственные правила проверки пароля (жестко закодированные в ядре во время публикации) и изменить метод отчетов об ошибках (массив $ errors, используемый для другие формы, а не сеансовые).Переопределить метод класса Laravel 4
Таким образом, мой подход, чтобы создать новый класс/приложение/Lib/MyProject/User называется Password.php, который выглядит следующим образом:
<?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;
}
}
Я скопировал метод сброса от/поставщика/Laravel /framework/src/Illuminate/Auth/Reminders/PasswordBroker.php, который, как представляется, разрешен для основного фасада Password.
Тогда в моем файле composer.json, я добавил следующее автозагрузку: classmap массив:
"app/lib/MyProject/User"
Наконец, в моем файле /app/config/app.php я внесены изменения в Пароль псевдонима:
'Password' => 'MyProject\User\Password',
OK. В моем routes.php файла у меня есть следующий, в значительной степени взято прямо из документации:
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';
});
});
Когда этот сброс() метод работает, я получаю следующее сообщение об ошибке:
Non-static method MyProject\User\Password::reset() should not be called statically
ДЕБЛОКИРОВОЧНЫХ() в классе, который я расширяю, не является статичным, поэтому меня удивляет, однако установка метода сброса для статической очистки устраняет эту ошибку. Далее, хотя, я получаю следующее сообщение об ошибке:
Using $this when not in object context
который приходит при попытке запустить $ this-> validateReset ($ учетные данные).
Теперь я полностью не в своей глубине. Я иду об этом правильно или полностью с правого пути?
Спасибо за любые советы
Вы когда-нибудь решали это? Если да, можете ли вы отправить ответ или комментарии. Спасибо – Laurence
Нет, боюсь, я этого не сделал. Сначала я зарегистрировал проблему на GitHub в проекте Laravel/Laravel, а затем в проекте Laravel/Framework. Тейлор закрыл его как обман, я думаю, что неправильно, поэтому я собираюсь его снова открыть: https://github.com/laravel/framework/issues/1672 –
Является ли это * еще * проблемой (или, по крайней мере, d как ответ)? Возможно, я объясню поведение, которое вы видите, и, возможно, даже предложите решение. Но я предполагаю, что это настолько старо, что вам все равно, или исправил это. – alexrussell