Zend_Form set action - 하위 디렉토리에 구축된 Zend 애플리케이션과 함께 작동할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1640738

문제

내 애플리케이션은 내 로컬 서버의 하위 디렉터리에 구축되고 있으며, 이는 다음과 같습니다.

http://localhost/application/

문제는 양식 작업을 "/form/save"로 설정하면 양식이 존재하지 않는 "localhost/form/save"로 라우팅된다는 것입니다.

양식 작업을 "/application/form/save"로 설정하면 Zend가 요청에 사용할 모듈, 컨트롤러 및 작업을 선택하기 위해 Front_Controller의 URL 입력을 사용하기 때문에 오류가 발생합니다.

요청에서 base_url을 구문 분석하는 간단한 방법이 있습니까?어떤 이유로 양식을 제외한 다른 모든 항목에서 작동합니다.

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

이와 같은 작업을 수행하도록 변수를 설정하는 간단한 방법이 이미 Zend에 내장되어 있습니까?그렇지 않다면 해결책은 무엇입니까?

어디에서도 이 문제를 해결하는 내용을 찾을 수 없는 것 같습니다.

도움이 되었습니까?

해결책

문제는 동작에 초기 슬래시를 포함시킴으로써 발생합니다. 루트에 관계없이 링크를 설정하면 대상 앵커가 동일한 도메인 이름 아래에있을 때 절대 링크를 설정하는 것과 같습니다. ( "/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에 자동으로 포함됩니다.

도움이 되었기를 바랍니다.

다른 팁

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

나는 Zend Framework를 처음 접 했으므로 이것이 최선의 솔루션인지 알지 못하지만 나에게 잘 작동합니다.

다음 코드를 사용하여 작업을 설정했습니다.

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top