2014-11-30 2 views
0

Cakephp V2.6Доступ к статическим переменным в cakephp

В моем текущем проекте я пытаюсь задействовать некоторые объектно-ориентированные функции. В моей модели modelX я создал собственный метод поиска для получения результатов определенным образом. Затем я возвращаю этот массив в контроллер и обслуживаю его до представления.

Я реализую плагин excel для экспорта данных, и данные, о которых идет речь, являются теми же, что отображаются в представлении. В моей пользовательской находке я присваиваю результаты статической переменной в моей модели, прежде чем возвращать результаты в контроллер. Когда я нажимаю кнопку экспорта, я хочу использовать контроллер для вызова метода modelX, чтобы вернуть этот статический массив, который можно передать моему плагину для экспорта данных. Однако я не могу это сделать. Я попытался объявить статическую переменную в классе, и она не работает. Я попытался позвонить global на переменную в назначенном методе, но она не работает. Единственный способ, которым я нашел это до сих пор, - записать переменную в сеанс, после чего я могу получить доступ из любой точки в любое время. Хотя это действительно работает, я считаю, что это неэффективно. Я не думаю, что это хорошая идея написать большой массив для сессии каждый раз, когда представление отображается, потому что оно не всегда будет необходимо.

Есть ли способ в торт для назначения данных переменной в модели, доступной вне экземпляра объекта, чтобы я мог это сделать?

+0

Почему вы хотите присвоить это значение к модели. Связано ли это с моделью? Было бы лучше, если бы вы показали здесь какой-то код. Нет необходимости жестко привязываться к файловой структуре по умолчанию. Вы можете создавать любые файлы и каталоги, в которых вы нуждаетесь. И классы внутри этих файлов. И вы можете реализовать внутри этих классов любые необходимые вам логики, включая setter/getter. – Alex

+0

Да, относится к модели. Я хочу экспортировать из нескольких моделей, когда и когда, и я искал ссылки на них через Model.variable из суперкласса –

ответ

1

В MyModel:

public static $x = array('a' => 'b'); 

В контроллере:

$y = MyModel::$x; 

Цитата PHP documentation:

Как и любой другой статической переменной PHP, статические свойства могут быть инициализированы только используя литерал или константу; выражения не допускаются. Итак, если вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращая значение функции или к объекту.

Используйте статические методы, когда вам нужно выполнить некоторые выражения перед возвратом статического массива. В модели:

public static function getX() { 
    $a = array('a' => 'b'); 
    $b = array('c' => 'd'); 
    return array_merge($a, $b); 
} 

В контроллере:

$y = MyModel::getX(); 
Смежные вопросы