2012-04-13 4 views
1

Ich habe ein Symfony 1.4-System, das verwendet wird, um verschiedene Website-Inhalte dynamisch von einem einzelnen Symfony-Projekt basierend auf dem Domänennamen zu laden. Dieses System hat ein Backend und im Backend habe ich die "Forgot Your Password" Funktionalität, die mit 1 Problem funktioniert. Die E-Mail sendet sie aus wird in apps/backend/config/app.yml mit der Einstellung:sfDoctrineGuard default_from_email

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

aber ich habe mehrere Domains nicht nur eine.

In meiner Datenbank habe ich die Domänennamen gespeichert, mein Controller hat Logik, um den aktuellen Domänennamen abzurufen, die Datenbank abfragen und speichert dann ein Sitzungsattribut von sid (site_id), die die Tabellen-ID für die angegebene Domäne ist.

Was ich tun möchte, ist die Fähigkeit, die default_from_email auf die aktuelle Domäne zu setzen.

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

je nachdem, welche Domäne der Endbenutzer für den Zugriff auf die Site verwendet hat. Meine Frage ist .. Gibt es eine Möglichkeit, in den

app.yml file to put a variable %domain% 

und dann irgendwo auf das Passwort vergessen Funktionalität zu füllen, dass ODER in sfDoctrineGuardPlugin Zusammenhang Gibt es eine Möglichkeit, die sfDoctrineGuardPlugin sfGuardForgotPassword Modul außer Kraft zu setzen, die Logik einfügen Verwenden Sie die aktuelle Domäne als die von E-Mail

Derzeit war meine Lösung, Logik in die BasesfGuardForgotPasswordActions.class.php einfügen, das ist nicht der richtige Weg (obwohl es funktioniert), aber ich brauchte eine schnelle Lösung.

+0

Also das gleiche symfony Projekt läuft auf zwei verschiedenen Domains? –

+0

Tatsächlich läuft es eine unbegrenzte Anzahl. Ich verwende den Domain-Namen als Schlüssel, um verschiedene Vorlagen, CSS, Title-Tags usw. zu setzen.Die Datenstruktur ist identisch, aber die HTML/CSS-Layouts werden basierend auf dem Domainnamen geändert. – Zjoia

Antwort

2

Natürlich können Sie die Standardbehandlung von sfGuardForgotPassword außer Kraft setzen:

  • ein neues Modul sfGuardForgotPassword in Ihrem apps/modules Ordner
  • einen neuen Ordner actions
  • erstellen eine Datei namens erstellen namens erstellen actions.class.php mit dieser Innen

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 
    } 
} 
0

Nicht sicher, Sie wissen oder nicht, aber Sie können PHP-Code innerhalb einer YAML-Datei und symfony umfassen die PHP-Code analysieren, so dass ich dachte, Sie so etwas wie tun könnte:

all: 
    sf_guard_plugin: 
    default_from_email: [email protected]<?php echo sfConfig::get('domain') . PHP_EOL ?> 

Aber diese scheint in meinen Tests nicht zu funktionieren, da ich 'noreply @' immer noch bekam, obwohl ich den Wert direkt nach der Erstellung von sfContext::getInstance() (aber nicht versendet) gesetzt habe. Ich habe sogar versucht, einen benutzerdefinierten Filter hinzuzufügen, aber es sieht so aus, als würde Symfony alle yaml-Dateien zuerst während der Projektkonfiguration aufheben und dann den Dispatch-Aufruf vornehmen.

Also ich denke, j0k Antwort ist Ihre beste Wette, obwohl es einige Overhead ist. Sie müssen ALLE Methoden vom Original in Ihre benutzerdefinierte Version kopieren. Das bedeutet, dass Sie im Falle eines Upgrades diese kopieren müssen, um sicherzustellen, dass Sie Änderungen erhalten.

Verwandte Themen