sfDoctrineGuard default_from_email

У меня есть система Symfony 1.4, которая используется для динамической загрузки различного контента сайта из одного проекта Symfony на основе доменного имени. У этой системы есть бэкэнд, и в бэкэнде у меня отлично работает функция «Забыли пароль», с 1 проблемой. Электронная почта, с которой он отправляет, устанавливается в apps/backend/config/app.yml с настройкой:

all:
  sf_guard_plugin:
    routes_register: true
    default_from_email: [email protected]

но у меня несколько доменов, а не один.

В моей БД я сохранил доменные имена, мой контроллер имеет логику для получения текущего доменного имени, запроса БД, а затем сохраняет атрибут сеанса sid (site_id), который является идентификатором таблицы для данного домена.

Что я хочу сделать, так это иметь возможность установить default_from_email для текущего домена.

i.e. [email protected] or [email protected] 

в зависимости от того, какой домен конечный пользователь использовал для доступа к сайту. Мой вопрос в том, есть ли способ в

app.yml file to put a variable %domain% 

а затем заполните это где-то, связанное с функцией забытого пароля в sfDoctrineGuardPlugin ИЛИ Есть ли способ переопределить модуль sfDoctrineGuardPlugin sfGuardForgotPassword, чтобы вставить логику для использования текущего домена в качестве адреса электронной почты

В настоящее время моим решением было вставить логику в BasesfGuardForgotPasswordActions.class.php, это НЕ ПРАВИЛЬНЫЙ СПОСОБ (хотя это работает), но мне нужно было быстро исправить.


person Zjoia    schedule 13.04.2012    source источник
comment
Значит, один и тот же проект Symfony работает на двух разных доменах?   -  person Mike Purcell    schedule 13.04.2012
comment
На самом деле он работает неограниченное количество. Я использую доменное имя в качестве ключа для установки различных шаблонов, css, тегов заголовков и т. д. Структура данных такая же, но макеты HTML/CSS изменяются в зависимости от доменного имени.   -  person Zjoia    schedule 13.04.2012


Ответы (2)


Конечно, вы можете переопределить обработку sfGuardForgotPassword по умолчанию:

  • создайте новый модуль с именем sfGuardForgotPassword в папке ваших приложений/модулей
  • создайте новую папку с именем actions
  • создайте файл actions.class.php с этим внутри

actions.class.php

<?php 
require_once(sfConfig::get('sf_plugins_dir').'/sfDoctrineGuardPlugin/modules/sfGuardForgotPassword/lib/BasesfGuardForgotPasswordActions.class.php');

/**
 *
 * @package    symfony
 * @subpackage plugin
 * @author     Fabien Potencier <[email protected]>
 * @version    SVN: $Id: actions.class.php 23319 2009-10-25 12:22:23Z Kris.Wallsmith $
 */
class sfGuardForgotPasswordActions extends BasesfGuardForgotPasswordActions
{
  protected function sendRequestMail($user, $forgotPassword)
  {
    // send the mail as you want
  }

  protected function sendChangeMail($user, $password)
  {
    // send the mail as you want
  }
}
person j0k    schedule 13.04.2012

Не уверен, что вы знаете или нет, но вы можете включить PHP-код в файл yaml, и symfony проанализирует php-код, поэтому я подумал, что вы можете сделать что-то вроде:

all:
  sf_guard_plugin:
    default_from_email: noreply@<?php echo sfConfig::get('domain') . PHP_EOL ?>

Но это, похоже, не работает в моем тестировании, поскольку я продолжал получать «noreply@», хотя я установил значение сразу после того, как sfContext::getInstance() был создан (но не отправлен). Я даже пытался добавить к нему собственный фильтр, но похоже, что Symfony сначала подберет все файлы yaml во время настройки проекта, а затем сделает диспетчерский вызов.

Поэтому я думаю, что ответ j0k - ваш лучший выбор, хотя есть некоторые накладные расходы. Вам придется скопировать ВСЕ методы из оригинала в вашу пользовательскую версию. Это означает, что если есть обновление, вам придется скопировать их, чтобы убедиться, что вы получите какие-либо изменения.

person Mike Purcell    schedule 13.04.2012