2009-06-15 2 views
1

Я создаю приложение, которое отслеживает подписи различных организаций. У меня есть простая форма, с которой я могу передать идентификатор, поэтому он автоматически выберет правильную организацию. URL для добавления выглядит так:Как сохранить параметры после проверки формы в CakePHP?

/signatures/add/3 

Форма работает хорошо. Пропустив 3, или любой другой идентификатор, то он автоматически выбирает правое поле, потому что на мой взгляд, я:

echo $form->input('organization_id', array('selected' => $this->passedArgs)); 

Я бегу в моей проблеме, когда пользователь забывает заполнить форму элемента. Форма возвращает пользователя:

/signatures/add/ 

Таким образом, у организации нет нужной организации. Он возвращается к умолчанию, равному 1. Любые советы о том, как сохранить мои параметры?

ответ

1

Я не знаю много о торте, но это похоже на действие формы есть/подпись/добавить/

Если добавить идентификатор в форме действия, так что читает действие = "Подпись/добавить/{ID} ", то он должен вернуться к этим организациям.

0

Благодарю Галена. Вы на самом деле указали мне в правильном направлении. Я понял, что моя форма хотел сохранить состояние организации, но я слишком писал, когда я сделал это:

echo $form->input('organization_id', array('selected' => $this->passedArgs)); 

Так что мне теперь делать вместо этого:

if (!empty($this->passedArgs)) { 
      echo $form->input('organization_id', array('selected' => $this->passedArgs)); 
     } else { 
      echo $form->input('organization_id'); 
     } 

И это делает Хитрость.

+0

рад, что я мог бы помочь – Galen

+0

Хотя это будет работать так, как ожидалось, я бы рекомендовал использовать именованные параметры для необязательных параметров. Когда я вижу «/ signature/add/3», я действительно не знаю, что такое «3». Если это было «/ signatures/add/organization: 3», это намного яснее. Не говоря уже о том, как это облегчит вашу жизнь, если вы когда-нибудь решите передать больше параметров: «/ signature/add/organization: 3/type: 2». Взгляните на документы торта для получения дополнительной информации, если раньше вы не использовали именованные параметры. –

0

Правильный способ установки organization_id на выбранное значение - включить его в свой массив данных в вашем контроллере. Например

function add($organization_id) 
    if(!empty($this->data)) { 
    if($this->Signature->save($this->data)) { 
     $this->setFlash('Save successful') 
     $this->redirect(array('action' => 'index')) 
    } else { 
     $this->setFlash('Please review the form for errors') 
    } 
    } 

    if($organization_id) { 
    $this->data['Signature']['organization_id'] = $organization_id; 
    } 
} 

Затем на ваш взгляд, просто положить

echo $form->create('Signature', array('action' => 'add')) 
echo $form->input('organization_id') 

, и он будет автоматически вставлять organization_id значения из данных контроллеров.

Смежные вопросы