Понимание моделей
Вот небольшой пример определения модели в CakePHP:
Простой текст<?phpclass Ingredient extends AppModel {var $name = 'Ingredient';}?>
Эти простое объявление модели Ingredient дает возможность пользоваться всем функционалом, который необходим для создания или удаления данных. Эти волшебные методы наследуются от модели CakePHP. Модель Ingredient расширяем модель приложения AppModel, которая в свою очередь расширяет внутренний класс модели CakePHP.
Этот промежуточный класс AppModel по умолчанию пуст и живет здесь /cake/ по умолчанию. Переопределение этого класса дает вам возможность определить методы, которые будут доступны всем моделям вашего приложения. Для этого вам нужно создать свой файл app_model.php в корне /app/ folder. Создавая проект при помощи Bake, этот файл будет автоматически создан.
Создавать PHP файл вашей модели нужно в директории /app/models/ или во вложенных директориях /app/models. CakePHP найдет все модели автоматически. По соглашению, имя файла должно быть такое же как имя класса(для нашео примера ingredient.php).
CakePHP динамически создает модель объекта, если даже он не найдет файл в /app/models. Это также значит, что если случайно вы неправильно обозвали файл(например Ingredient.php или ingredients.php) CakePHP будет использовать AppModel, а не ваш неправильно обозванный класс. Если вы попробуете вызвать пользовательский метод своей модели, то вы получите SQL ошибку, так как CakePHP не нашел вашей модели.
Посмотрите также Поведения для подробной информации о том как применить одинаковую логику в нескольких моделях.
Атрибут $name обязателен для PHP4 и неважен для PHP5.
Когда ваша модель определена, доступ к нем можно получить из
With your model defined, it can be accessed from within your Контроллера. CakePHP автоматически сделает модель доступной когда ее имя совпадет с именем контроллера. Например, контроллер IngredientsController автоматически инициализирует модель Ingredient и добавит ее в контроллер как$this->Ingredient.
<?phpclass IngredientsController extends AppController {function index() {//вытянуть все ингредиенты и передать их в отображение:$ingredients = $this->Ingredient->find('all');$this->set('ingredients', $ingredients);}}?>
Связанные модели доступны из основной модели. В следующем примере модель Recipe связана с моделью Ingredient.
Простой текст$this->Recipe->Ingredient->find('all');
Как вы уже знаете, в Контроллере мы можете подключить множество моделей и иметь доступ к ним прямо из контроллера. В следующем примере обе модели Recipe и User доступны из текущего контроллера.
Простой текст<?phpclass RecipeController extends AppController {var $uses = array('Recipe', 'User');function index() {$this->Recipe->find('all');$this->User->find('all');}}?>
Если вы не добавили модель используя $uses, тогда вам для ее использования необходимо сперва импортировать, а потом уже использовать в контроллере.
<?phpclass RecipeController extends AppController {var $uses = array('Recipe');function index() {$this->Recipe->find('all');App::import('Model', 'User');$user = new User();$user->find('all');}}?>


Коментарии:
Добавить коментарий