Префикс названия модели плагина Cakephp - PullRequest
0 голосов
/ 27 января 2012

У меня есть плагин с именем «Admin», и мои методы похожи на index, add и т. Д. Поскольку я хочу применять уникальные имена моделей и контроллеров (для реализации ACL), я поставил перед всеми контроллерами и моделями префикс с именем плагина.(см. модель плагина cakephp / проблема с кэшем контроллера для основной модели / контроллера ).После этого я сталкиваюсь со следующими проблемами.У меня есть таблица с именем users, и я использую cakephp2.0.

1) Мне нужно получить доступ к URL с помощью domain.com/admin/admin_users/index или admin / content / admin_index, вместо этого я хочу получить доступпо admin / users / index или admin / content / index.Как установить это в маршрутах в общих чертах так, чтобы это было применено ко всем?

2) В представлении, это показывает неопределенный индекс User (я испек представления ранее).Все идет как AdminUser.После установки public $ alias = 'User' эта проблема была решена.Это правильно?

3) В контроллере я должен изменить "$ this-> User-> some var / fn" на $ this-> AdminUser-> some var / function - все места.Есть ли способ решить эту проблему?

Что-то не так с именем плагина, назначенным от имени администратора (я не установил маршрутизацию администратора)?

1 Ответ

2 голосов
/ 27 января 2012

Вы можете смело назвать админ вашего плагина, это ни в коем случае не зарезервированное слово.Однако Cake не учитывает имена плагинов при разборе имен моделей / контроллеров, поэтому AdminUsersController и AdminUser фактически будут рассматриваться как классы, принадлежащие некоторому абстрактному AdminUser.Таким образом, чтобы решить все ваши проблемы, используя только магию Cake, вам нужно на самом деле назвать их User и UsersController, и надеяться, что эти имена не конфликтуют.Если это не вариант, вы можете предоставить свое собственное волшебство для решения этих проблем:

1) Как псевдоним контроллера - один из примеров конфигурации маршрута в поваренная книга

2) Да, если вы хотите использовать «Пользователь» в качестве ключа, это правильно.

3) На самом деле не используется только Cake magic, потому что переменная $uses не поддерживаетсглаживание.Однако вы можете воспользоваться преимуществами новой отложенной загрузки 2.0, выполнив что-то подобное в вашем AdminUsersController:

 <?php
 public function __get($name) {
    // Note, the isset triggers lazy-loading. Check out Controller::__isset()
    // if you want to see how that works.
    if ($name == 'User' && isset($this->AdminUser)) {
        // Assign to admin user here to bypass the next time
        return ($this->User = $this->AdminUser);
    }

    // Delegate to CakePHP's magic getter
    return parent::__get($name);
}
...