2009-10-28 6 views
1

내 응용 프로그램 내 로컬 서버의 하위 디렉토리에 건설되고, 즉이 같은 같습니다Zend_Form set action - 하위 디렉토리에 빌드 된 Zend 응용 프로그램과 함께 작동 할 수 있습니까?

http://localhost/application/ 

문제는 그런 나는 "/ 양식/저장"하는 형태로 동작 양식 경로로 설정하는 경우 "localhost/form/save"는 존재하지 않습니다.

"/ application/form/save"로 설정하면 젠드가 Front_Controller에서 URL 입력을 사용하여 요청에 사용할 모듈, 컨트롤러 및 액션을 선택하기 때문에 오류가 발생합니다.

base_url을 요청에서 파싱하는 간단한 방법이 있습니까? 어떤 이유로 든 양식을 제외하고는 다른 모든 것에 적용됩니다.

또 다른 대안은 모든 양식 작업에 base_url을 추가하여 응용 프로그램이 다른 환경에서 작동하고 컨트롤러가 작업을 수신 할 때 구문 분석하도록하는 것입니다.

Zend에 이미 내장되어있는 이런 식으로 변수를 설정하는 간단한 방법이 있습니까? 그렇지 않은 경우 해결책은 무엇입니까?

어디서나이 문제를 해결할 수있는 방법이없는 것 같습니다.

답변

4

문제는 작업에 초기 슬래시를 포함하여 발생합니다. 루트 상대 링크로 링크를 설정하면 대상 앵커가 동일한 도메인 이름 아래에있을 때 절대 링크를 설정하는 것과 동일합니다. ("/ form/save"는 "http://localhost/form/save"과 동일합니다).

다른 컨트롤러/동작으로 데이터를 보내려면 양식에 기본 URL을 추가해야하는 것처럼 들릴 수 있습니다. Zend_Form (오른쪽?)을 사용하는 경우 가장 좋은 해결책은 Zend_Form의 하위 클래스로 setAction() 메서드를 재정 의하여 설정 한 모든 작업에 기본 URL을 추가하는 것입니다.

class My_Form extends Zend_Form 
{ 
    ... 
    public function setAction($action) 
    { 
     $baseAction = rtrim($this->_getBaseUrl(),'/') . $action; // Will remove a slash from the end of the base URL, so form actions start with a slash. 

     parent::setAction($baseAction); 
    } 

    private function _getBaseUrl() 
    { 
     // Retrive your base url from somewhere (config might be a good place). 
    }   
} 

은 이제 My_Form에서 새 양식을 만들고 My_Form::setAction()를 호출 할 때마다 당신은 당신의 기본 URL이 자동으로 포함해야합니다.

희망이 도움이됩니다.

0

작업을 비워두면 동일한 작업으로 양식 데이터를 처리 할 수 ​​있습니다.

0

젠드 프레임 워크에 익숙하지 않아 이것이 최고의 솔루션인지 잘 모르겠지만 잘 작동합니다.

$url = new Zend_View_Helper_Url(); 
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default')); 
:

나는 동작을 설정하려면 다음 코드를 사용