CakePHP: получить текущее имя контроллера в модели

Я создаю поведение, которое должно регистрировать текущее имя контроллера. Как я могу получить текущее имя контроллера из модели в CakePHP?


person rizidoro    schedule 15.12.2010    source источник
comment
какую версию PHP вы используете?   -  person DampeS8N    schedule 15.12.2010


Ответы (6)


Я знаю, что этот вопрос довольно старый, но правильным решением здесь будет:

$this->params['controller']

Для получения дополнительной информации об атрибуте params:
http://book.cakephp.org/view/963/The-Parameters-Attribute-params

person TheBigB    schedule 09.03.2011
comment
$this-›params недоступен внутри модели - person rizidoro; 15.02.2012
comment
@rizidoro Модель не должна знать ни о каких других аспектах MVC, кроме самой себя. Лучшим способом сделать это было бы получить имя контроллера в контроллере и передать его модели в качестве аргумента. - person TheBigB; 03.03.2012

Попробуй это. если вам нужно только имя контроллера.

Inflector::pluralize($this->name);
person RSK    schedule 15.12.2010
comment
Проголосовали против, потому что вы не можете получить имя контроллера из имени модели, поскольку модель может использоваться из разных контроллеров. - person dhofstet; 16.12.2010
comment
@dhofestet: спасибо за исправление. Я не думал об этом случае. :( - person RSK; 16.12.2010

$GLOBALS['Dispatcher']->params['controller']

даст вам имя контроллера

person umberleigh    schedule 23.02.2012

Я нашел решение, оно не красивое, но сработало для меня. Я просто использую $_REQUEST['url'] и перехватываю имя контроллера по URL-адресу. Недостатком этого решения является то, что если у вас другой маршрут по умолчанию, это решение не будет работать ... у кого-нибудь есть лучший подход?

person rizidoro    schedule 16.12.2010
comment
В зависимости от того, чего вы пытаетесь достичь, вы можете написать компонент. - person dhofstet; 16.12.2010

Для тех, кто пересматривает этот вопрос и использует CakePHP 3.x:

$this->request->getParam('controller')
person Axel Köhler    schedule 30.01.2021

Одной из магических констант PHP является __CLASS__, которая возвращает имя класса объекта, в котором он находится. Это может дать вам то, что вам нужно.

http://php.net/manual/en/language.constants.predefined.php

Магические константы и методы — это весело.

person DampeS8N    schedule 15.12.2010
comment
Мне любопытно, почему кто-то проголосовал за это? Это начало решения, которое, похоже, будет работать (даже если оно неоптимально). Пожалуйста, оставьте комментарий, если вы понизите голос. - person Travis Leleu; 15.12.2010
comment
Хотел бы я тоже знать. Вероятно, в Cake есть какой-то способ. Я не использую торт, поэтому я не знаю. Может быть, Cake не использует классы для контроллеров? Кто знает. - person DampeS8N; 15.12.2010
comment
Я не отрицал этот ответ, но разве это не возвращает название поведения? - person dhofstet; 16.12.2010
comment
да... это возвращает имя поведения - person rizidoro; 16.12.2010
comment
Отсюда май в моем ответе. Поскольку многие фреймворки решили обернуть контроллер в класс. (например, CodeIgniter). Если Cake не делает, но делает что-то еще, чтобы контроллеры работали, то да, это не поможет. - person DampeS8N; 16.12.2010
comment
Контроллер — это класс в CakePHP, хотя поведение — тоже класс. - person dhofstet; 16.12.2010