url kerangka zend dan dapatkan metode

Saya sedang mengembangkan situs web menggunakan kerangka zend.

saya memiliki formulir pencarian dengan metode dapatkan. ketika pengguna mengklik tombol kirim, string kueri muncul di url setelahnya? tanda. tapi saya ingin zend seperti url.

apa itu mungkin?


person rahim asgari    schedule 01.10.2010    source sumber


Jawaban (3)


Serta pendekatan JS Anda dapat melakukan pengalihan kembali ke URL pilihan yang Anda inginkan. Yaitu. biarkan formulir dikirimkan melalui GET, lalu arahkan ke gaya perutean ZF.

Namun, ini berlebihan kecuali Anda memiliki alasan bagus untuk ingin membuat URL yang rapi untuk permintaan pencarian Anda. Secara umum formulir pencarian harus mengirimkan kueri GET yang dapat di-bookmark. Dan tidak ada yang salah dengan parameter gaya ?param=val di URL :-)

URL ZF agak aneh karena memaksa parameter URL menjadi bagian dari URL utama. Yaitu. domain.com/controller/action/param/val/param2/val daripada domain.com/controller/action?param=val¶m2=val

Ini tidak selalu yang Anda inginkan, tetapi tampaknya itulah yang terjadi pada kerangka kerja dengan parameter URL

person simonrjones    schedule 01.10.2010
comment
+1 Meskipun pengalihan tampaknya tidak diperlukan, sepertinya ini adalah cara yang tepat. Lihat jawaban saya dengan metode pengontrol yang dapat digunakan kembali untuk mendapatkan perilaku itu. - person timdev; 24.02.2011

Tidak ada solusi yang jelas. Formulir yang dihasilkan oleh zf akan menjadi formulir html standar. Jika dikirimkan dari browser menggunakan GET maka akan menghasilkan permintaan seperti

/action/specified/in/form?var1=val1&var2=var2

Satu-satunya solusi untuk mendapatkan "url zendlike" (dengan / bukan? atau &), adalah dengan meretas pengiriman formulir menggunakan javascript. Misalnya Anda dapat mendengarkan onSubmit, membatalkan pengiriman dan mengarahkan browser ke url yang diterjemahkan. Saya pribadi tidak percaya solusi ini sepadan dengan kerumitan tambahannya, tetapi solusi ini akan memberikan apa yang Anda cari.

person Fredrik    schedule 01.10.2010

Setelah menentang hal ini selama satu setengah hari, dan melakukan yang terbaik untuk mencari cara yang tepat untuk melakukan hal ini dengan cukup sederhana, saya menyerah dan melakukan hal berikut. Saya masih tidak percaya tidak ada cara yang lebih baik.

Kasus penggunaan yang memerlukan ini adalah daftar catatan sederhana, dengan formulir di bagian atas untuk menambahkan beberapa filter (melalui GET), mungkin beberapa pengurutan kolom, dan Zend_Paginate dimasukkan untuk pengukuran yang baik. Saya mengalami masalah saat menggunakan pembantu tampilan Url di sebagian penomoran halaman saya, tetapi saya curiga bahkan hanya dengan penyortiran dan formulir filter, Zend_View_Helper_Url masih akan gagal.

Tapi saya ngelantur. Solusi saya adalah menambahkan metode ke kelas pengontrol dasar saya yang menggabungkan parameter string kueri mentah apa pun dengan params garis miring gaya zend yang ada, dan mengalihkan (tetapi hanya jika perlu). Metode ini dapat dipanggil dalam tindakan apa pun yang tidak harus menangani POST.

Semoga seseorang akan menemukan ini berguna. Atau lebih baik lagi, temukan cara yang lebih baik:

  /**
   * Translate standard URL parameters (?foo=bar&baz=bork) to zend-style 
   * param (foo/bar/baz/bork).  Query-string style
   * values override existing route-params.
   */
  public function mergeQueryString(){
    if ($this->getRequest()->isPost()){
      throw new Exception("mergeQueryString only works on GET requests.");
    }    
    $q = $this->getRequest()->getQuery();
    $p = $this->getRequest()->getParams();
    if (empty($q)) {
      //there's nothing to do.
      return;
    }
    $action = $p['action'];
    $controller = $p['controller'];
    $module = $p['module'];
    unset($p['action'],$p['controller'],$p['module']);
    $params = array_merge($p,$q);
    $this->_helper->getHelper('Redirector')
            ->setCode(301)            
            ->gotoSimple(
                    $action,
                    $controller,
                    $module,
                    $params);

  }
person timdev    schedule 23.02.2011