торт php 1.3?Могу ли я использовать любую модель в любом контроллере и видах? - PullRequest
1 голос
/ 06 ноября 2010

У меня вопрос к примеру. Мне нужно показать все категории книг и флажков на странице, которую я хочу опубликовать в следующем просмотре, не взаимодействуя с БД, и там я хочу сохранить их в скрытом поле в строке, разделенной запятыми.

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

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

Ответы [ 3 ]

3 голосов
/ 08 ноября 2010

Предложение Матиаса работает, но это не рекомендуемый способ действий.

Если вы добавите модели в свойство $ users, вы будете загружать эти модели для каждого действия в вашем контроллере, которое требуетбольше вычислительной мощности и может негативно повлиять на производительность вашего сайта.

Подробнее о том, почему это не очень хорошая идея, можно узнать из документации CakePHP .

Лучшим вариантом является использование метода контроллера loadModel ().

Например:

BooksController extends AppController {
    function index() {
        $this->loadModel('Category');
        $this->set('categories', $this->Category->find('all'));
    }
}

Дополнительную информацию о методе loadModel можно найти в документации: book.cakephp.org/view/977/Controller-Methods#loadModel-992

2 голосов
/ 09 ноября 2010

Помимо загрузки самой модели, вы можете использовать модель в контроллере, отличном от его собственного, при условии наличия связи между двумя моделями.Например, рассмотрим следующее соотношение:

"Books" Model BelongsTo "Category" Model

В этом сценарии вы можете использовать

$this->Book->Category->find() inside BooksController 
as well as 
$this->Category->Book->find() inside CategoriesController

В вашем случае будет полезно, если вы разместите свою схему базы данных.Тем не менее, чтобы найти книгу, я предполагаю, что вы используете определенные параметры, такие как категории, жанры, издатели и т. Д. При условии, что у каждого параметра будет своя собственная таблица и модель базы данных, ваш поиск будет выглядеть следующим образом:

Page 1: Список категорий с флажками для выбора

  • Функция - Индекс контроллера категории ()
  • Просмотр - / app / views / Categories / index
  • Передает в -Поиск жанров в контроллере ()

Страница 2: Список жанров с флажками для выбора

  • Функция - Поиск в жанре контроллера ()
  • Просмотр - /app / views / genres / search
  • Passes to - Поиск контроллера издателей ()

Страница 3: Список издателей с флажками для выбора

  • Функция - поиск контроллера издателя ()
  • Просмотр - / app / views / publishers / search
  • Передача - Результаты контроллера книги ()

Страница 4: списокКниги отфильтрованы в соответствии с данным пунктомметров

  • Функция - результаты контроллера книги ()
  • Просмотр - / app / views / books / results
  • Передача - Нет

Я пытался руководить, насколько это возможно, оставьте комментарий, если вам все еще не ясно, как искать книги.Если вам нужна помощь с передачей данных с одного контроллера на другой, прочитайте руководство CakePHP (http://book.cakephp.org/view/57/Controller-Methods) или Google, используя «cakephp, передающий данные с одного контроллера на другой» в качестве ключевых слов.

1 голос
/ 07 ноября 2010

По поводу вопроса в заголовке:

Да, вы можете использовать любую модель в любом контроллере.Установите

var $uses = array("Model_1", "Model_2", ...);

И модель объекта должна быть доступна

$this->Model_1->find(...);
...