我的zend会话名称间距不起作用

时间:2013-06-11 08:33:38

标签: oop zend-framework zend-session-namespace

我是Zend的新手,非常热衷于学习,所以我非常感谢一些帮助和指导。

我正在尝试创建一个'类中的方法',它将成员访问的产品页面的会话变量保存到一个站点,即

我,e 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语法吗?我完全不知道应该怎么做?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
        }
    }

这就是主意。

请注意您的工作流程,因为有时可能会非常简单地无意中覆盖您的会话值。