Передайте переменную от контроллера к модели
Вопрос
Я провел последние пару дней, пытаясь выяснить, как пройти переменные от моего контроллера к моей модели.Я пытаюсь построить очень простой фильтр продукта, который предпринимает некоторые формы входа и создает коллекцию продукта на основе них.У меня есть построенная форма, и я использую AJAX:
jQuery.ajax(
{
url: formURL,
type: "POST",
data: {
location : location,
width : width
},
success: function() {
alert('form good');
},
error: function() {
alert('form issue');
}
});
.
Чтобы опубликовать на моем контроллере:
class Custom_GateSelector_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$gate_location = $this->getRequest()->getPost('location');
$gate_width = $this->getRequest()->getPost('width');
}
}
.
Тогда мне нужны две переменные, которые могут быть доступны в моей модели:
class Custom_GateSelector_Model_Products extends Mage_Catalog_Model_Product
{
public function getItemsCollection()
{
$topStairs = 'yes';
$gateWidth = 29.00;
$rootcatID = Mage::app()->getStore()->getRootCategoryId();
$collection = $this->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('gate_max_width', array('gt' => $gateWidth))
->addAttributeToFilter('category_id', array('in' => $rootcatID))
->addAttributeToFilter('type_id', array('eq' => 'simple'))
->addAttributeToSort('price', 'DESC')
->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED));
return $collection;
}
}
.
Я попробовал метод Mage::register('gate-location', $gate_location);
, но я не могу получить доступ к ним в классе модели по какой-то причине.
Решение 3
Так что после долгих недели вытягивания моих волос я пришел, чтобы понять, что лучший способ пройти информацию от контроллера к модели.Благодаря Бен @ Sonassi, чтобы ответить на неродственный вопрос, который заставил меня осознать, что я могу использовать
Mage::app()->getRequest()->getParam('location');
.
Чтобы получить переменную пост внутри действия модели для доступа к тому, что мне нужно.
Другие советы
Так что вы в основном хотите передать переменную из одного класса в другую?
Если это то, что вы хотите достичь, почему бы не передавать их в качестве параметров метода?getItemsCollection
IIRC не определен в любом родительском классе - так что вы можете изменить его подпись:
public function getItemsCollection($gateLocation, $gateWidth)
{
// …
}
.
Если вы хотите избежать этого по какой-либо причине, вы все равно можете изменить коллекцию позже:
$collection = $gsProduct->getItemsCollection();
$collection->addAttributeToFilter('gate_max_width', array('gt' => $gateWidth))
. Если вы будете модель
Custom_GateSelector_Model_Products
на этом генеракодицетагкодете, то он получил бы эти параметры на модели.
$gate_location = Mage::app()->getRequest()->getPost('location');
$gate_width = Mage::app()->getRequest()->getPost('width');
.
в соответствии с системой Magento, вы не можете получить текущий контроллер не может добраться до другой страницы