как передать переменную из представления в действие контроллера в Zend Framework

На мой взгляд, у меня есть эта строка кода

<a href="<?php echo $this->url.'/login/calllogs/id/'.$record->phone_service_id;?>">Control Panel</a>

в моем контроллере входа у меня есть это действие

public function calllogsAction(){
    if(!Zend_Auth::getInstance()->hasIdentity()){
        $this->_redirect('login/login');
    } else{
        $request = $this->getRequest();
        $this->view->assign('url', $request->getBaseURL());
    }
}

Как я могу получить свою переменную просмотра ($record->phone_service_id;) в моем действии (calllogsAction)? Я не отправляю, это просто ссылка. Я думаю, что не могу сделать это так, как в моих журналах действий

$request = $this->getRequest();
$phone_service_id =  $request->getParam("id");

person Fawad Ghafoor    schedule 31.01.2012    source источник
comment
Почему ты не можешь этого сделать? Похоже, это правильный метод.   -  person Richard Parnaby-King    schedule 31.01.2012
comment
Что вы имеете в виду, говоря, что я не отправляю? Вы не переходите по ссылке? Вы хотите передать переменную из представления в контроллер в том же запросе?   -  person bububaba    schedule 31.01.2012
comment
localhost / phoggi / web_root / index.php / login / calllogs / id / 439 я не хочу отображать его в адресной строке   -  person Fawad Ghafoor    schedule 31.01.2012
comment
@bububaba это просто ссылка, которую я имел в виду. конечно, я хочу clcik. да, когда пользователь нажимает ссылку, я хочу, чтобы программа перешла к действию, которое происходит, но идентификатор отображается в адресной строке, я не хочу этого   -  person Fawad Ghafoor    schedule 31.01.2012
comment
@xaineekhan Ваш вопрос непонятен. А что вы не хотите показывать в адресной строке? Не могли бы вы объяснить еще немного.   -  person Matthieu Napoli    schedule 31.01.2012


Ответы (2)


Если вы не хотите, чтобы идентификатор отображался в адресной строке, вам придется использовать POST. Использовать

<form method="post" action="<?php /*your URL here*/ ?>">

вместо простой ссылки внутри формы:

<input type="hidden" name="id" value="<?php /*your id here*/ ?>"/>

и в контроллере используйте

$id = $this->getRequest()->getPost("id");
person bububaba    schedule 31.01.2012
comment
Я не хочу использовать здесь POST, а также не хочу показывать его в адресной строке, это возможно? - person Fawad Ghafoor; 31.01.2012
comment
@xainee Khan Если вы не хотите использовать почту или использовать ajax. используйте javascript. PHP нужен какой-то способ получить информацию от клиента к серверу, и вам не нравится ни один из методов, соответствующих этому контексту. Остается javascript. Фактически вы можете хешировать идентификатор, прежде чем помещать его в URL-адрес. ;) - person RockyFord; 31.01.2012
comment
@RockyFord, как я могу вызвать запрос ajax для этого действия в моем контроллере - person Fawad Ghafoor; 31.01.2012
comment
Конечно, ajax в конечном итоге все равно использует http (например, post или get) - не обойтись без того простого факта, что вам придется использовать тот или другой. - person Hecksa; 31.01.2012

Как оказалось, первоначальный ответ был таким же, как и ваша попытка.

Если вам не нужен идентификатор в адресной строке (имейте в виду, что любой может видеть данные публикации, если у них есть нужные инструменты), то другой вариант - использовать POST с формой -

<form action="<?php echo $this->url.'/login/calllogs/id';?>" method="post">
<input type="hidden" name="id" value="<?php echo $record->phone_service_id; ?>" />
<input type="submit" name="submit" value="Control Panel" />
</form>

Затем вам нужно будет использовать getPost, а не getParam в контроллере, чтобы получить переменную.

person Hecksa    schedule 31.01.2012
comment
localhost / phoggi / web_root / index.php / login / calllogs / id /? id = 439 я не хочу отображать его в адресной строке - person Fawad Ghafoor; 31.01.2012
comment
@Hecksa /controller/action/id/123 эквивалентно /controller/action/?id=123 - person Matthieu Napoli; 31.01.2012
comment
@Matthieu интересно, никогда не встречал такого раньше. Спасибо. - person Hecksa; 31.01.2012
comment
@xaineekhan обновил ответ, чтобы использовать POST с формой. Очевидно, вы можете оформить кнопку отправки так, чтобы она выглядела как ссылка, если хотите. - person Hecksa; 31.01.2012