Лучшая практика CakePHP: администратор с или без маршрутизации - PullRequest
5 голосов
/ 16 июля 2010

Я работаю над пересмотром приложения CakePHP, которое я создал под CakePHP 1.2. Я обновился до версии 1.3 и собираюсь отойти от парадигмы административной маршрутизации для моего приложения. Я обнаружил, что некоторые из моих контроллеров становятся чрезвычайно большими из-за дублирующих функций для интерфейса и администратора. Моя интуиция заключается в том, что гораздо проще создать набор контроллеров администратора и отбросить административную маршрутизацию вместе, но я хотел получить информацию о том, что делают другие, и о том, какие функциональные возможности, если таковые имеются, я пропущу сбросив маршрут.

Что считается наилучшей практикой для надежного приложения CakePHP (или другой инфраструктуры MVC) в этом отношении?

Ответы [ 5 ]

1 голос
/ 14 октября 2010

я создавал приложения, используя административную маршрутизацию, а не версию, а не версия - это всегда беспорядок.если некоторые из ваших методов одинаковы, вы можете сделать следующее:

function add(){
$this->_add();
}

function admin_add(){
$this->_add();
}

function _add(){
... your code ...
}

я бы поспорил, что не весь ваш код одинаков, и не используя маршрутизацию администратора, вы получите много кодаделает if(... is admin ...) { echo 'blaa'} else { echo 'foo'; }

1 голос
/ 03 сентября 2010

Я бы предложил просто разделить интерфейсное приложение и администратор на два отдельных приложения (/app и /admin).Просто представьте, что администратор - это простое интерфейсное приложение, выполняющее всю «грязную» работу с базой данных.

Таким образом, вы сможете получить доступ к своему администратору, используя префикс / admin в URL или в настройке.DocumentRoot в / admin / webroot и доступ к администратору с использованием субдомена (например, admin.myapp.com).

Чтобы избежать дублирования кода модели, вы можете поместить свои модели в некоторую общую папку (например, /vendors/core/models) и добавить этопути к модельным путям в bootstrap.php файлах (App::build('models' => array(VENDORS . 'core/models/')) для CakePHP 1.3, $modelPaths = array(VENDORS . 'core/models/') для CakePHP 1.2).

Чтобы добавить больше деталей для администраторов или приложений в свои модели, вы можете расширить свои основные модели в/ models, загружая базовую модель и расширяя ее:

App::import('Model', 'CoreModelName');

class CustomCoreModelA extends CoreModelA
{
    function specificMethod() {}
}

Это может быть сделано для общих компонентов, поведения и т. д.

0 голосов
/ 17 июля 2010

Во-вторых, я бы использовал ACL / role для реальных действий администратора и, возможно, не использовал бы административную маршрутизацию в производственной среде.Иногда я сохраняю scaffolded (так минимум лишнего кода) административную маршрутизацию для низкоуровневого администрирования, доступную только мне, но это, вероятно, не разумно в надежном производственном приложении.

Редактировать после комментария: Это не оптимально, но вы можете собрать что-то, что будет выглядеть так, как вам нужно, в URL-адресах, а также организовать в папки.Я еще не смог протестировать его, но вот идея:

Создайте папку «admin» в вашей папке контроллеров, а для пользователей admin создайте файл контроллера users_admin_controller.php.Они разрушают структуру папок, поэтому вы по-прежнему не можете иметь те же имена, что и корневой каталог, но вы все равно можете разделить их в папку.

Это по умолчанию приведет к ситуации типа /admin_users/add, ноэто может быть изменено со второй частью, некоторые маршрутизации:

Router::connect('/admin/users/:action', array('controller'=>'admin_users'))

Это должно быть сделано для каждого раздела администратора - не идеально, но я не могу найти лучший способ без изменения кода Cake.

0 голосов
/ 05 августа 2010

Я использовал ACL для своего приложения и нахожу его намного лучше, чем использование маршрутизации администратора. Это намного проще. Если вам действительно нужен префикс, вы можете сделать это с помощью обычной маршрутизации.

0 голосов
/ 17 июля 2010

Не беспокойтесь о маршрутизации администратора, если она не соответствует вашему сценарию. Я также не использую это, пути администратора не соответствуют моему приложению. Дублирование кода - это пустая трата усилий.

Вы можете использовать правила ACL для детализированных ролей или просто проверить роль (флаг администратора) в beforeFilter () контроллера или в первой строке действия.

У меня есть функция Component checkRole (array ()), которая вызывается в первой строке моих действий. Если текущий пользователь не имеет предоставленных ролей, он регистрирует и завершает запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...