Мой Zend сеанс между именами не работает
Я новичок в Zend и очень хочу учиться, поэтому я был бы очень признателен за помощь и руководство.
Я пытаюсь создать "метод в классе", который будет сохранять переменные сеанса страниц продукта, посещаемых участниками, на сайте, т.е.
например, 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 ответа
$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
Вы спрашиваете о простом рабочем процессе в действии, оно должно начинаться примерно так:
//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;
}
}
Это идея.
Помните о своем рабочем процессе, поскольку иногда непреднамеренно можно перезаписать значения сеанса.