这是我正在尝试做的事情:
我们在项目中使用Laravel 4.2
,并使用框架“Password::remind
功能发送电子邮件以重置密码。
问题是团队希望所有电子邮件模板都位于数据库内而不是views
文件夹中,因此我必须以某种方式将字符串传递给Illuminate\Auth\Reminders\PasswordBroker::sendReminder
方法。
如何在Laravel中覆盖此类,以便我可以使这个东西工作?我现在是一个Laravel新手,所以我还没有完全理解框架是如何工作的......
答案 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等