Для первой части вашего вопроса вы должны взглянуть на класс маршрутизации CI:
http://codeigniter.com/user_guide/general/routing.html
В этом подходе нет ничего принципиально неправильного, но вам действительно не нужны два контроллера. Предположительно, вы делаете это, чтобы ваши URI правильно отображались в браузере? Если так, допустим, у вас есть контроллеры, называемые items и solditems. Вы можете настроить маршрут так:
$ route ['solditems / (: any)'] = "items / solditems / $ 1";
Таким образом, когда кто-то вводит mysite.com/solditems/category, скрипт запускается на контроллере по адресу mysite.com/items/solditems/category.
.
Редактировать : Я должен также добавить кое-что о моделях, так как это было в вашем названии. По сути, вы хотите, чтобы контроллеры были слоем «доступа» для ваших приложений ... по сути, именно так, как у вас сейчас. Просмотр, очевидно, содержит визуальную презентацию вашего сайта. Модели обрабатывают все данные. Если вы хотите получить список всех продуктов, вам понадобится модель «продукты» и функция там, называемая «getProducts» или что-то в этом роде. Затем другой называется getProductById или что-то в этом роде. Если вы сообразительны, вы придумаете стандартный метод форматирования данных, так что вы всегда будете знать, чего ожидать от вызовов данных, и, таким образом, сможете передавать возвращаемые значения непосредственно из вашей модели в представление от до ваш контроллер. Поэтому, если вы хотите получить все проданные товары, у вас может быть контроллер, который обрабатывает запрос и выполняет вызов модели, модель выполнит запрос к базе данных и доставит данные обратно в контроллер любым удобным для вас способом, и Ваш контроллер будет полностью независим от того, что возвращается, но просто передает эту переменную в представление для обработки визуально. Вы также можете обрабатывать некоторую логику представления в вашем контроллере, если у вас есть большое количество представлений (например, если у вас есть одно представление, которое является «элементом списка» для одного из ваших проданных предметов ... вы можете использовать свой контроллер перебрать переменную, возвращаемую из модели, передавая их один за другим в представление «элемент списка», конкатенировать эту строку (см .: необязательный третий параметр для $ this-> load-> view ()), а затем вставить эту строку в виде списка.
Вы можете проявить себя настолько креативно, насколько захотите, если только вы помните, что смысл всего этого заключается в том, чтобы логически отделить уровень доступа от уровня представления от уровня данных. Помимо этого абстрактного разделения, нет «лучших практик», только то, что лучше для вас.