gpt4 book ai didi

laravel - 重写 Laravel 4 的核心类方法

转载 作者:行者123 更新时间:2023-12-02 18:43:40 25 4
gpt4 key购买 nike

如果这是一个愚蠢的问题,我深表歉意,因为 Laravel 4 的很多内容对我来说都是新的。我试图覆盖核心密码功能中的几个方法,因为我想定义自己的密码验证规则(在发布时硬编码到核心中),并更改错误报告的方法(用于其他形式,而不是基于 session )。

所以我的方法是在/app/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;
}

}

我从/vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php 复制了重置方法,这似乎是核心密码外观解析的位置。

然后在我的composer.json 文件中,我将以下内容添加到 autoload:classmap 数组中:

"app/lib/MyProject/User"

最后,在我的/app/config/app.php 文件中,我修改了密码别名:

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

好的。在我的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';
});
});

当这个reset()方法运行时,我收到以下错误:

Non-static method MyProject\User\Password::reset() should not be called statically

我正在扩展的类中的reset()方法不是静态的,这让我感到惊讶,但是将我的重置方法设置为静态可以清除该错误。接下来,我收到以下错误:

Using $this when not in object context

当尝试运行 $this->validateReset($credentials) 时出现。

我现在完全超出了我的能力范围。我是以正确的方式还是完全偏离了正确的道路?

感谢您的建议

最佳答案

您应该扩展 Illuminate\Auth\Reminders\PasswordBroker 类,而不是 \Illuminate\Support\Facades\Password

\Illuminate\Support\Facades\Password 类是一个 Facade,而不是最终类。

您可以通过以下方式查看立面的最终类别:

get_class(Password::getFacadeRoot());

关于laravel - 重写 Laravel 4 的核心类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com