Zend: parametreler ile Eylem yönlendir

5 Cevap php

Ben zend framework kullanıyorum. Ben başka bir eyleme yönlendirmek için aşağıdaki deyimi kullanıyorum.

$this->_helper->redirector('some_action');

Yukarıdaki açıklamada mükemmel çalışıyor ve 'some_action' denir. Şimdi böyle 'some_action' bazı parametreler geçmek istiyorum.

some_action?uname=username&umail=username@example.com

Ve nasıl denir eylem parametreleri almak için. Genellikle bu gibi yapın:

$userName = $_REQUEST['uname'];
$usermail = $_REQUEST['umail'];

Bu gerçekleştirmek için nasıl? Örnek kod lütfen. Teşekkürler

5 Cevap

(Sadece Sarfraz yardımcısı yöntemine geçer) Zend_Controller_Action::redirect() yöntemini kullanın

$this->redirect('/module/controller/action/username/robin/email/robin@example.com');

Not: _redirect() yöntemi Zend Framework 1.7 olarak önerilmemektedir. redirect() yerine kullanın.

Ve sonra adlandırılan eylem:

$username = $this->_getParam('username');
$email = $this->_getParam('email');

_getParam () parametre bulunamazsa, varsayılan olarak değişken için ayarlanmış bir ikinci isteğe bağlı argüman alır.

Eğer yeniden yönlendiricisi ile deneyebilirsiniz:

$params = array('user' => $user, 'mail' => $mail);
$this->_helper->redirector($action, $controller, $module, $params);

Bunu denemek isteyebilirsiniz:

  $this->_redirector->gotoUrl('/my-controller/my-action/param1/test/param2/test2');

Ayrıca ekleyebilir $ params kullanıcı'kimliği için böyle söylüyorlar

public function indexAction ()
{
    $auth = Zend_Auth::getInstance();
    if ($auth->hasIdentity()) {
        // Identity exists; get it
        $identity = $auth->getIdentity();
        $this->_redirect('/user/profile/' . $identity->user_id);
    } else {
        $this->_redirect('/user');
    }
}

Ben tabii bu bir $ param kabul etmeye yönlendirme kurulum var varsayarak, söylemeyi unuttum. Örnek olarak yönlendirme Yukarıdaki örnekte yönlendirilir ediliyor sayfası için bu gibi bir şey olacaktır:

/ Uygulama / yapılandırmaları / application.ini

resources.router.routes.user-profile.route = /user/profile/:id
resources.router.routes.user-profile.defaults.module = default
resources.router.routes.user-profile.defaults.controller = user
resources.router.routes.user-profile.defaults.action = profile

Alacağınız nasıl param sorta, nerede bağlıdır

Sen burada ne yapmak istediğinizi elde etmek için bir istek $ param yakalamak zorunda değilsiniz. Sadece yığını bir mesaj eklemek için FlashMessenger yardımcı kullanarak edilir. Daha sonra ben successAction olduğu gibi görünümüne atamak sonra, mesajı göstermek istediğiniz eylem içinde mesaj almak. Eğer gibi denetleyicisi atayarak herhangi $ var ya da veri dizisi iletebilir unutmayın: $ this-> görünüm-> var = $ var; Sonra $ this-> var olarak erişilebilir olacak görünümü içinde.

Eğer giriş hakkında sorulan beri ben genellikle bunu nasıl göstereceğim. Değil, onun en iyi yolu o.

Benim LoginController dizin görünümü formunu tutar:

    public function indexAction() {
    $form = new Zfcms_Form_Login;
    $this->view->form = $form;
     /*check for valid input
       authenticate using adapter
       persist user record to session
       redirect to original request URL if present*/
    if ($this->getRequest()->isPost()) {
        if ($form->isValid($this->getRequest()->getPost())) {
            $values = $form->getValues();

            $authAdapter = $this->getAuthAdapter();

            # get the username and password from the form
            $username = $values['username'];
            $password = $values['password'];

            # pass to the adapter the submitted username and password
            $authAdapter->setIdentity($username)
                    ->setCredential($password);

            $auth = Zend_Auth::getInstance();
            $result = $auth->authenticate($authAdapter);

            if ($result->isValid()) {

                # all info about this user from the login table
                # ommit only the password, we don't need that
                $userInfo = $authAdapter->getResultRowObject(null, 'password');

                # the default storage is a session with namespace Zend_Auth
                $authStorage = $auth->getStorage();
                $authStorage->write($userInfo);


                $session = new Zend_Session_Namespace('zfcms.auth');
                if (isset($session->requestURL)) {
                    $url = $session->requestURL;
                    unset($session->requestURL);
                    $this->_redirect($url);
                } else {
                    $this->_helper->getHelper('FlashMessenger')
                            ->addMessage('You were successfully logged in as ' . $userInfo->username);
                    $this->_redirect('/login/success');
                }
            } else {
                $this->view->message = 'You could not be logged in. Please try again.';
            }
        }
    }
}

Başarı eylem biz bunu:

public function successAction() {
    if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
        $this->view->messages = $this->_helper
                        ->getHelper('FlashMessenger')
                        ->getMessages();
    } else {
        $this->_redirect('/login/success');
    }
}

Görünümü scriptte ben aşağıda ne var gibi bir şey yapabilirsiniz. Ben bunu bu şekilde yapmak nedeni, bazen ben sadece kullanmak bu durumda, bir denetleyicisi tek bir mesajı geçecek olmasıdır:

$this->view->message = 'message goes here';

Sonra onları yakalamak hem de görünümde ayarlanmışsa:

<?php 
    if(isset($this->message) || isset($this->messages)):
?>

<?php
if(is_array($this->messages))
{
    echo implode($this->messages);
} else {
    echo $this->message;
}?>

<?php 
endif 
?>