2012-04-13 2 views
1

도메인 이름을 기반으로 하나의 Symfony Project에서 다른 사이트 콘텐츠를 동적으로로드하는 데 사용되는 Symfony 1.4 시스템이 있습니다. 이 시스템에는 백엔드가 있으며 백엔드에는 1 개의 문제가있는 "비밀번호 찾기"기능이 잘 작동합니다. 이 설정과 응용 프로그램/백엔드/설정/app.yml에 설정에서 보내는 이메일 :sfDoctrineGuard default_from_email

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

하지만 여러 도메인이없는 한.

내 DB에는 도메인 이름이 저장되어 있으며 컨트롤러에는 현재 도메인 이름을 가져 오는 논리가 있으며 DB를 쿼리 한 다음 주어진 도메인의 테이블 ID 인 sid (site_id)의 세션 속성을 저장합니다.

내가하고 싶은 일은 default_from_email을 현재 도메인으로 설정하는 것입니다.

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

최종 사용자가 사이트에 액세스하는 데 사용하는 도메인에 따라 다릅니다. 내 질문이 있습니다 ..

app.yml file to put a variable %domain% 

의 방법이 다음에 논리를 삽입 할 sfDoctrineGuardPlugin sfGuardForgotPassword 모듈을 오버라이드 (override) 할 수있는 방법이 있나요 곳 sfDoctrineGuardPlugin 또는 에서 비밀번호 찾기 기능에 관한 것을 채울 현재 도메인을 보낸 사람 전자 메일로 사용하십시오.

현재 내 솔루션은 BasesfGuardForgotPasswordActions.class.php에 논리를 삽입하는 것이었지만, 이것이 올바른 방법은 아니지만 빠른 수정이 필요했습니다. 물론

+0

그래서 동일한 심포니 프로젝트가 두 개의 다른 도메인에서 실행됩니까? –

+0

실제로 무제한으로 실행됩니다. 도메인 이름을 키로 사용하여 다른 템플릿, CSS, 제목 태그 등을 설정합니다.데이터 구조는 동일하지만 HTML/CSS 레이아웃은 도메인 이름을 기반으로 변경됩니다. – Zjoia

답변

2

, 당신은 sfGuardForgotPassword의 기본 처리를 재정의 할 수

  • 파일을 생성
  • actions
  • 라는 새 폴더를 생성하여 앱/모듈 폴더에 sfGuardForgotPassword라는 새 모듈을 만들 actions.class.php 이 내부

actions.class.php

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

하지만이 : 당신이 알고 여부,하지만 당신은 YAML 파일과 PHP 코드를 구문 분석 심포니 내에서 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

확실하지 않음 sfContext::getInstance()이 생성되었지만 (파견되지 않은) 바로 값을 설정하더라도 'noreply @'를 계속 사용함에 따라 테스트에서 제대로 작동하지 않는 것 같습니다. 필자는 사용자 정의 필터를 추가하려고 시도했지만 Symfony가 프로젝트 구성 중에 모든 yaml 파일을 먼저 선택하고 디스패치 호출을하는 것처럼 보입니다.

그래서 약간의 오버 헤드가 있지만 j0k의 대답이 최선이라고 생각합니다. 모든 메소드를 원본에서 사용자 정의 버전으로 복사해야합니다. 즉, 업그레이드가 있으면 변경 사항을 적용하기 위해 업그레이드를 복사해야합니다.