0

私は Zend の初心者であり、学ぶことに非常に熱心です。

メンバーが訪問した製品ページのセッション変数をサイトに保存する「クラス内のメソッド」を作成しようとしています。

つまり、examplesite com/product/?producttype= 6

数値 6 をセッション変数に保存したい。また、サイト全体でグローバル セッションを行いたくありません。選択したページにのみ必要です。したがって、選択したページに Zend_Session::start() を配置する必要があると思います。しかし、これをどのように行うべきかは明確ではありません。

ページビューページでインスタンス化する必要がありますか。つまり、製品ページまたは製品ページの indexAction() メソッドでこれを行います。以下でインスタンス化を試みましたが、うまくいきませんでした。

public function rememberLastProductSearched()

{          //my attempt to start a session start for this particular page.
      Zend_Session::start();

}

$session->productSearchCategory = $this->_request->getParam('product-search-category');
    return"  $session->productSearchCategory   ";
   }

else
{ 
  //echo " nothing there
 return "  $session->productSearchCategory";
 //"; 

}

}

rememberLastProductSearched() メソッドを使用して、ユーザーが新しい製品を検索したか、デフォルトでページに到達したかを最初に確認するメソッドを取得しようとしていました。つまり、get() アクションを使用して新製品を検索したかどうか。答えが「いいえ」の場合、以前に保存されたセッション変数であったかどうかをシステムに確認させたいと考えました。したがって、手続き型構文では次のようになります。

if(isset($_Get['producttype']))
 {
   //$dbc database connection
$producttype = mysqli_real_escape_string($dbc,trim($_GET['producttype']));

 }
  else
  if(isset($_SESSION['producttype'])){

   $producttype =   mysqli_real_escape_string($dbc,trim($_SESSION['producttype']));       

}

Zend/oop の構文について教えてください。私はそれがどうあるべきか完全に混乱していますか?

4

2 に答える 2

0

アクションの単純なワークフローについて質問している場合は、次のように開始する必要があります。

//in any controller
public function anyAction() 
{
    //open seesion, start will be called if needed
    $session  = new Zend_Session_Namespace('products');
    //get value
    $productCategory = $this->getRequest()->getParam('producttype');
    //save value to namespace
    $session->productType = $productCategory;
    //...
}

これを別のメソッドに移動するには、データをメソッドに渡す必要があります...

protected function rememberLastProductSearched($productType)
{
    //open seesion, start will be called if needed
    $session  = new Zend_Session_Namespace('products');

    $session->productType = $productType;
}

したがって、値の存在をテストしたい場合は...

 //in any controller
    public function anyAction() 
    {
        //open seesion, call the namespace whenever you need to access it
        $session  = new Zend_Session_Namespace('products');

        if (!isset($session->productType)) {
            $productCategory = $this->getRequest()->getParam('producttype');
            //save value to session
            $this->rememberLastProductSearched($productCategory)
        } else {
            $productCategory = $session->productType;
        }
    }

それがアイデアです。

セッション値を誤って上書きしてしまうことが非常に単純な場合があるため、ワークフローに注意してください。

于 2013-06-11T09:41:12.527 に答える
0
$session = new Zend_Session_Namespace("productSearch");
if ($this->getRequest()->getParam('producttype')) { //isset GET param ?
    $session->productType = $this->getRequest()->getParam('producttype');
    $searchedProductType = $session->productType;
} else { //take the session saved value
    if ($session->productType) {
       $searchedProductType = $session->productType;
     }  
}
//now use $searchedProductType for your query
于 2013-06-11T08:49:40.867 に答える