В Cakephp, как получить имя одной из моделей, используемых в представлении? - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть файл print_coupon.ctp, который я хотел бы использовать для купонов из любой из моих категорий купонов .... ресторанов, ночных клубов, полей для гольфа и т. Д. (Все они имеют свои собственные модели).В моем контроллере у меня есть такая логика:

 public function print_all_coupons() {
      $this->layout ='couponlayout';
      $this->set('title', 'Print all coupons for Gulf Shores');
      $this->Coupon->recursive=2;
     $this->paginate['Coupon']=array(
                'limit'=>9,
                'order'=>array(
                    'id'=>'asc'
                    ),
                'conditions'=>array(
                        'OR'=>array(
                            'expires' =>0,
                            'Coupon.end_date >'=>date('Y-m-d')
                        ))
                );
        $c=$this->paginate('Coupon');
      $this->set('printcoupons', $c);
      }

Это позволяет мне видеть вверх по лестнице, поскольку любой купон принадлежит ресторану, полю для гольфа, ночному клубу, пользователю и т. Д. Обычно в моем представлении о печати говорят ресторанкупон, я бы извлек свои данные, сказав что-то вроде

echo $h['Restaurant']['Location']['address'];

, что прекрасно работает, только для ресторанов.Я хотел бы иметь возможность получить переменную из контроллера, которая позволила бы мне изменить любую модель, к которой относится купон, например:

echo $h['$someModel']['Location']['address'];

Конечно, это возможно в Cakephp?

1 Ответ

1 голос
/ 03 февраля 2012

Вам нужны похожие модели?Они доступны в виде массива в $this->params->models.

РЕДАКТИРОВАТЬ:

Если я правильно понимаю, вы хотите echo расположение для некоторых связанных моделей?$this->params->models содержит ассоциативный массив связанных моделей.Связанный массив моделей для вашего CouponModel может выглядеть следующим образом:

Array
(
    [Restaurant] => Array
        (
            [plugin] => 
            [className] => Restaurant
        )

    [GolfCourse] => Array
        (
            [plugin] => 
            [className] => GolfCourse
        )

    [Nightclub] => Array
        (
            [plugin] => 
            [className] => Nightclub
        )

    [User] => Array
        (
            [plugin] => 
            [className] => User
        )

)

Затем вы можете выполнить цикл по этому массиву и получить местоположение каждой модели.Для ясности я сохранил модели и каждое имя класса в переменной.

<?php
  $associatedModels = $this->params->models;
  foreach ($associatedModels as $model) :
    $className = $model['className'];
    echo $h[$className]['Location']['address'];
  endforeach;
?>
...