Zend_Form set action - 하위 디렉토리에 구축된 Zend 애플리케이션과 함께 작동할 수 있습니까?
-
08-07-2019 - |
문제
내 애플리케이션은 내 로컬 서버의 하위 디렉터리에 구축되고 있으며, 이는 다음과 같습니다.
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'));