2013-06-18 3 views
0

CakePHP: 2.3.5Получить константы модели

class Table extends AppModel { 

    const STATUS_FREE = 0; 
    const STATUS_BUSY = 1; 
    const STATUS_INCHECK = 2; 
    const STATUS_LINK = 3; 
    const STATUS_CLEAN = 4; 
    const STATUS_CASHIER = 9; 

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

$this->loadModel('Table'); 
$free = Table::STATUS_FREE; 

Я тоже попробовать:

self::STATUS_FREE 

Почему мне нужно использовать $this->loadModel, если я в TablesController?

+0

Является ли 'TablesController'! =' Table'? –

+0

Если я вас правильно понимаю: TablesController! = Table, потому что Table - это модель (app/Model/Table.php) –

ответ

1

Вам не нужна loadModel. Вам просто нужен класс. Вы также можете достичь этого через App :: uses() - какой тип работает как ленивый загруженный require().

Просто введите классы, в которых вам нужны константы сверху вашего основного класса. Всегда.

App::uses('Table', 'Model'); 
App::uses('OtherModelWithContantsYouNeed', 'Model'); 

class TablesController extends AppController {} 

Теперь вы можете использовать свои константы в любом месте вашего кода контроллера, а также все его виды!

Это также, как я это делаю для своих констант класса в моих перечислениях (http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/). Более подробно объясняется, что происходит.

+0

Я думал, что это было уже по умолчанию, чтобы Table была Model of TablesController. В любом случае, спасибо! –

+0

Обычно. Но это будет принято слишком поздно во время выполнения. Статический доступ происходит до автоматического включения. Вот почему это ручное определение должно быть - но это также не повредит :) – mark