Dostu URL'ler ile CakePHP form gönderme

1 Cevap php

Ben bir CakePHP uygulamasında bir form yazmak zorunda. Form araç satışı reklamların bir listesini arar ve oldukça karmaşık olan (~ 10 alanlar: modeli, üretici, yakıt türü vb.) Şu anda, form POST yoluyla gönderilir ve oldukça iyi çalışıyor. Sorun arama sorguları bookmarkable URL'ler oluşturmak gerekiyor ve bunu gerçekleştirmek için en iyi yolu ne olduğunu merak idi.

Ben $form->create() yöntemine 'type' => 'get' geçen çalıştı, ancak bu usercars/search/?model=...&[...] gibi bir URL oluşturur ve kırmak için arama neden olur.

Ben URL <some routing>/<Manufacturer>/<Model>/<Fuel>/<etc> gibi bir şey olmak için, ve aynı zamanda parametre atlandığını (diğer parametreler eksik olsa bile, yani <some routing>/<Manufacturer>, verilen üreticiden tüm araba listelemek için) desteklemek istiyorum. POST, şu anda bu işler ile. Ben sadece bir params seçerseniz, bana doğru sonuçlar verir.

Formu gönderiminden güzel url oluşturmak ve kontrolör girişini işleme $this->data yolu ile uyumluluğu korumak için pasta belirlemek için herhangi bir yolu olup olmadığını merak ediyorum. Ben belgelerine geçtiniz ve bunu yapmak için herhangi bir yol bulmuş değil.

Zaten iki seçenek var:

  • Bunun yerine, $this->data ile çalışan params ile arama yöntemi hedefleyen bir rota oluşturma ve bir URL'ye kumandanın beforeFilter() yönteminde bir yönlendirme yapıyor fonksiyonu parametreleri desteklemek denetleyicisi eylem yeniden bu yol karşılık gelir.
  • URL'yi + bunu işleme yukarıdaki şekilde inşa arama formu sayfasında javascript yapıyor.

Ne tavsiye edersiniz?

1 Cevap

Kekinin isimli argümanlar üzerinden bunu yapmak için, yerleşik bir yolu yoktur. Eğer gibi görünmek için link yapılandırılmış Yani

/controller/action/manufacturer:toyota/model:prius/

Denetleyicisi eylem, onlar $ böyle baktım bir ilişkisel dizi olarak bu-> passedArgs kullanılabilir olacaktır

Array
(
    [manufacturer] => toyota
    [make] => prius
)

Ayrıca bkz:

http://book.cakephp.org/view/46/Routes-Configuration

Burada dinamik (prototip kullanarak) göndermeniz üzerine form url oluşturmak için prototip kullanarak bir örnektir.

Event.observe(window, 'dom:loaded', function(e1)
{
    $("formid").observe('submit', function(e)
    {
        this.select(".inputclass").each(function(input)
        {
           name = input.readAttribute('name')
           val = name.match(/data\[.*\]\[(.*)\]/);

           if(val && val[1])
           {
               name = val[1]
           }

           $("formid").action += "/" + name  + ":" + $F(input);
        });

        return this.submit();
    });   
});