1.Контроллер будет иметь представление вызова некоторых функций, и он разделен, но он все еще очень близок с самой логикой, если изменение контроллера для возврата в JSON или XML для отображения результата, это кажется очень сложной задачей.
Зависит от того, как вы организовали свой код и что вы фактически передаете в представление (шаблон).Если это хорошо структурировано, у вас может быть одно представление для HTML, одно для XML и одно для json, где json обычно просто кодирует переменные представления (см. json_encode
Docs ).
2.Кажется много методов, но каждый зависит от другого.
Ну, просто не делайте этого :) Имена выглядят так, словно вы хотели «закодировать это».Держите это в стороне.Сделайте те функции фактически действиями, которые выполняет пользователь:
register - that action handles the registration process
Сделайте из него контроллер входа, который обрабатывает все, что вам нужно:
login - the login action
lost_password - the lost password action
register - the registration action
activate - the registration activation action
Все остальное там не принадлежит.Нет необходимости в действии для отображения какой-либо страницы - сам контроллер может решить, какое представление выбрать.
Кроме того, вам не нужно отображать ошибки базы данных.CI заботится об этом.Просто вкладывайте только то, что нужно, и будьте проще.Это должно помочь вам сократить количество методов и их код.
3.Я думаю, что трудно отследить код.
Конечно.Слишком много функций с ненастоящими именами.Держите вещи простыми.Это нелегко, но придавайте именам и уменьшайте общую логику.