2

ユーザーが不正なアクションを試みる前に、次を保存します。

1) コントローラー名

2) アクション

3) POST パラメータ

次に、ユーザーがログインに成功したら、リダイレクトします...

$params["controller"] = "manage";
$params["action"] = $lastRequest["action"];
$params["name"] = "Ignacio";
$params["email"] = "ignacio@gmail.com";

return $this->redirect()->toRoute("user-create", $params);

リダイレクトはしますが、投稿されたパラメーターはありません。

コントローラーから ZF2 で POST 要求をエミュレートするにはどうすればよいですか? ポイントは、ユーザーがリダイレクトされる場所がわからないため、GET または POST および任意のコントローラーである可能性があります。

4

3 に答える 3

5

これは、リクエストを保存し、後でそれを使用して正しいアクションにリダイレクトする方法です。

1) 許可されていないアクションにより、すべての GET/POST パラメータを使用してリクエストが保存されます。

$session = new Container('base');
$session->offsetSet("lastRequest", $event->getRequest());

2) ログインに成功したら、要求された場所にリダイレクトします

$session = new Container('base');
if($lastRequest = $session->offsetGet("lastRequest")) {
    //Just redirect, because I could NOT find a way to POST params
    return $this->redirect()->toUrl($lastRequest->getRequestUri());
}

3) コントローラ アクションの前に、すべての POST/GET パラメータを取得します

class Module {
//...
    public function init($moduleManager)
    {
        $sharedEvents = $moduleManager->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100);
    }

    public function preDispatch($event)
    {

    //Unauthorized request after success login
    $session = new Container('base');
    if($lastRequest = $session->offsetGet("lastRequest")) {
        $event->getTarget()->getRequest()->setMethod($lastRequest->getMethod());
        $event->getTarget()->getRequest()->setPost($lastRequest->getPost());
        $event->getTarget()->getRequest()->setQuery($lastRequest->getQuery());

        //Delete request
        $session->offsetSet("lastRequest", null);               
    }
}

4)通常どおり、宛先アクションでリクエストを使用するだけです

class ManageController extends AbstractActionController {

    public function createAction() {
        if ($this->getRequest()->isPost()) {
            $post = $this->getRequest()->getPost()->toArray();
    }

}
于 2012-12-14T19:52:46.190 に答える
2

POST データでユーザーをリダイレクトすることはできませんが、ZF2 はこれをシミュレートする機能を提供します: http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-post-redirect-取得プラグイン

于 2012-12-13T23:20:39.030 に答える
0

このソリューションは役立つかもしれませんが、リダイレクトを使用する代わりに、別のコントローラーに転送します。

他のコントローラに転送する前に、現在のリクエストの post パラメータを置換 (または更新) します。受信側コントローラーは、置き換えられた (または更新された) 投稿パラメーターを確認します。

// Controller that handles unauthorized access

class YourController extends AbstractActionController
{

    // ...

    $request   = $this->getEvent()->getRequest();
    $postParam = new \Zend\Stdlib\Parameters();

    $postParam->set('controller', 'manage');
    $postParam->set('action',     $lastRequest['action']);
    $postParam->set('name',       'your-name';
    $postParam->set('email',      'your-email';

    $request->setPost($postParam);

    return $this->forward()->dispatch('Your\Other\UserCreateController', [
        'action' => 'userCreate',
    ]);

    // ...

}
于 2017-01-05T05:15:39.380 に答える