Передайте переменную от контроллера к модели

magento.stackexchange https://magento.stackexchange.com//questions/72967

  •  13-12-2019
  •  | 
  •  

Вопрос

Я провел последние пару дней, пытаясь выяснить, как пройти переменные от моего контроллера к моей модели.Я пытаюсь построить очень простой фильтр продукта, который предпринимает некоторые формы входа и создает коллекцию продукта на основе них.У меня есть построенная форма, и я использую 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 на этом генеракодицетагкодете, то он получил бы эти параметры на модели.

Так, позвоните ниже функций на GetItemsCollection

$gate_location = Mage::app()->getRequest()->getPost('location');
$gate_width    = Mage::app()->getRequest()->getPost('width');
.

в соответствии с системой Magento, вы не можете получить текущий контроллер не может добраться до другой страницы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top