Отправка формы CakePHP с дружественными URL - PullRequest
2 голосов
/ 04 апреля 2010

Я должен переписать форму в приложении CakePHP. Форма ищет список объявлений о продаже автомобилей и является довольно сложной (~ 10 полей: модель, производитель, тип топлива и т. Д.). В настоящее время форма отправляется через POST и работает довольно хорошо. Проблема в том, что мне нужно создавать закладки для URL из поисковых запросов, и мне было интересно, как лучше всего это сделать.

Я попытался передать 'type' => 'get' методу $form->create(), но при этом создается URL-адрес, подобный usercars/search/?model=...&[...], и поиск прерывается.

Я хочу, чтобы URL был чем-то вроде <some routing>/<Manufacturer>/<Model>/<Fuel>/<etc>, а также поддерживал пропуск параметров (т. Е. <some routing>/<Manufacturer>, чтобы вывести список всех автомобилей данного производителя, даже если другие параметры отсутствуют). К POST, в настоящее время это работает. Если я выберу только один из параметров, он даст мне правильный результат.

Интересно, есть ли какой-нибудь способ определить торт для создания красивого URL из представления формы и поддерживать совместимость с $this->data способом обработки ввода в контроллере. Я просмотрел документацию и не нашел способа сделать это.

У меня уже есть две альтернативы:

  • переписывает действие контроллера для поддержки параметров функции вместо работы с $this->data, построения маршрута, нацеленного на метод поиска с параметрами, и выполнения перенаправления в методе beforeFilter() контроллера на URL, соответствующий маршруту.
  • выполнение javascript на странице формы поиска для создания URL + вышеуказанный способ его обработки.

Что бы вы порекомендовали?

1 Ответ

3 голосов
/ 06 апреля 2010

Существует встроенный способ сделать это с помощью именованных аргументов торта.Поэтому, если вы структурировали свои ссылки так, чтобы они выглядели как

/ контроллер / действие / производитель: toyota / model: prius /

В вашем действии контроллера они будут доступны$ this-> passArgs как ассоциативный массив, который выглядел следующим образом

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

Смотрите также:

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

Вот пример использования прототипа для динамического созданияURL-адрес формы при отправке (с использованием прототипа).

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();
    });   
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...