2014-10-22 3 views
0

Вот что я пытаюсь сделать:Как перезаписать базовый метод laravel?

Мы используем Laravel 4.2 в нашем проекте, и использую Password::remind функциональности рамочной для отправки электронной почты для сброса пароля.

Проблема заключается в том, что команда хочет, чтобы все шаблоны электронной почты находились внутри базы данных, а не в папке views, поэтому мне придется каким-то образом передать строку методу Illuminate\Auth\Reminders\PasswordBroker::sendReminder.

Как я могу переопределить этот класс в Laravel, чтобы я мог заставить эту работу работать? Я в настоящее время новичок Laravel, поэтому я еще не совсем понимаю, как работает рамочная структура ...

ответ

1

Непросто переопределить классы просто. Вся почта laravel основана на представлениях. Но вы, вероятно, можете создать обходное решение для достижения своей цели.

Для этого вы должны сделать требуемые виды. В поставщике услуг или в файле маршрута вы создаете композитор представления. С этим композитором представления вы извлекаете данные из базы данных, и единственное, что вы делаете в представлении, - это печать значения.

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

Или что-то в этом роде. Теперь вы видите print {{$ html}}, и он работает!

Редактировать: Для вас информация view composer - это что-то вроде прослушивателя событий. Когда изображение загружено, загружается функция обратного вызова композитора. В этой функции обратного вызова вы можете передать дополнительную переменную с некоторым содержимым. В представлении вы можете распечатать это значение, добавленное в композиторе.

+0

Если я правильно понял это, это позволяет мне создать представление из строки? – Loupax

+0

Да. Я отредактировал ответ, чтобы добавить дополнительную информацию. – ArjanSchouten

+0

Это работало как прелесть в моем случае :) Если бы только сейчас мы могли заставить его работать, не сохраняя пустой файл в папке представлений, которая была бы идеальной! – Loupax

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 и т. Д.

Смежные вопросы