如何覆盖核心laravel方法?

时间:2014-10-22 16:40:27

标签: php oop laravel

这是我正在尝试做的事情:

我们在项目中使用Laravel 4.2,并使用框架“Password::remind功能发送电子邮件以重置密码。

问题是团队希望所有电子邮件模板都位于数据库内而不是views文件夹中,因此我必须以某种方式将字符串传递给Illuminate\Auth\Reminders\PasswordBroker::sendReminder方法。

如何在Laravel中覆盖此类,以便我可以使这个东西工作?我现在是一个Laravel新手,所以我还没有完全理解框架是如何工作的......

2 个答案:

答案 0 :(得分:1)

简单地覆盖这些类并不容易。整个laravel邮件基于视图。但是你可以创建一个解决方法来实现你的目标。

为此,您必须提供所需的观看次数。在服务提供商或您的路线文件中,您可以创建一个视图编辑器。使用该视图编辑器,您可以从数据库中检索数据,并且您在视图中唯一要做的就是打印值。

View::composer(array('reminders.password','reminders.other'), function($view)
{
    $view->with('html', RemindersRepository::getHtml());
});

或类似的东西。现在,您可以查看print {{$ html}}并且它有效!

编辑: 对于您的信息,view composer类似于事件监听器。加载视图时,将加载作曲家的回调函数。在该回调函数中,您可以传递带有一些内容的额外变量。在视图中,您可以打印在作曲家中添加的此值。

答案 1 :(得分:1)

以下是有关如何在Laravel中覆盖/扩展核心功能的基本指南:

您可以在app/start/中创建一个文件夹,然后创建自己的类来覆盖默认行为,例如NewReminderServiceProvider.php然后扩展有问题的核心功能:

class NewReminderServiceProvider extends Illuminate\Auth\Reminders\ReminderServiceProvider {}

然后覆盖或扩展registerPasswordBroker

在您要扩展的父级中,您将看到它设置视图的位置:

$view = $app['config']['auth.reminder.email'];

根据需要将其更改为数据库驱动。

然后最后你必须用你的ReminderServiceProvider NewReminderServiceProvider替换app/config/app.php,你就可以了。这几乎适用于任何核心功能。更换或延长刀片,auth等