Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual11/Configuration ...

Конфигурация


Оглавление документа

Настройка базы данных


Файл настройки базы данных app/config/database.php расположен там же где и все основные настроечные файлы сайта. После новой установки файл database.php отсутствует, поэтому вам потребуется сделать копию файла database.php.default и переименовать ее в database.php. Скопировав и переименовав файл, вы увидите следующее:


app/config/database.php
<?
  
var $default = array('driver'   => 'mysql',
    
'connect'  => 'mysql_connect',
    
'host'     => 'localhost',
    
'login'    => 'user',
    
'password' => 'password',
    
'database' => 'project_name',
    
'prefix'   => '');
?>


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


Одно замечание о параметре prefix: строка которую вы туда введете будет присоединяться ко всем запросам SQL, которые будет делать Cake к вашей базе данных при работе с таблицами. Вы задаете этот параметр здесь единожды, поэтому вам не нужно упоминать его где-либо еще. Префикс полезен в тех случаях, когда несколько приложений на вашем сайте работают с одной базой данных.


Cake PHP? поддерживает следующие драйвера базы данных:

  1. mysql
  2. postgres
  3. sqlite
  4. pear-drivername (вы можете написать pear-mysql, например)
  5. adodb-drivername

Параметр 'connect' в $default позволяет указать устойчивым ли будет соединение с базой данных или нет. Комментарии в файле database.php.default расскажут вам о том, какой тип соединения следует использовать.


Таблицы вашей базы данных должны также соответствовать следующим требованиям:

  1. Имена таблиц, которые будут использованы Cake'ом должны состоять из английских слов во множественном числе, как “users”, “authors” или “articles”. Заметьте, что соответствующие модели необходимо называть в единственном числе.
  2. Во всех таблицах обязательно должно быть поле 'id', выставленное как primary key.
  3. Если вы планируете связать таблицы, используйте инородные ключи типа: 'article_id', то есть имя таблицы в единственном числе, затем подчеркивание, затем 'id'.
  4. Если вы включаете в вашу таблицу колонки 'created' и/или 'modified', Cake автоматически заполнит их в подходящий момент датами создания и изменения записи соответственно.

Вы можете так же поменять настройки в переменной $test, находящейся в том же database.php. Можно создать неограниченное количество настроек для соединения с БД в этом файле, а затем в контроллерах писать что-то вроде:
var $useDbConfig = 'test';

Глобальные настройки

Глобальные настройки Cake PHP? расположены в app/config/core.php. Как бы вы не хотели избежать настройки – он должен быть отредактирован. В этом файле есть несколько вещей, которые можно изменить, подсказки в комментариях в файле core.php.


Константа DEBUG: Параметр нужен для того чтобы помочь вам с выводом отладочной информации в процессе создания приложения. Если присвоить ему значения отличные от нуля, то Cake будет выводить результаты функций pr() и debug(), и установит автоматические сообщения. Значение 2 или выше будет выдавать результаты запросов SQL внизу страницы.


Также в отладочном режиме (debug mode) (где параметру DEBUG соответствует 1 или выше), Cake выдаст специально сгенерированные страницы ошибок, например «Отсутствует контроллер», «Отсутствует действие» и т.д. В режиме «готового продукта» (когда параметру DEBUG соответствует 0), Cake выдает страницу «Не найдено», которую можно изменить в файле app/views/errors/error404.thtml.


CAKE_SESSION_COOKIE: Присвойте этому параметру значение имени cookie, которое бы вы хотели использовать для сессии пользователя в ваших приложениях Cake.


CAKE_SECURITY: Присвойте этому параметру значение, чтобы указать предпочтительный уровень проверки сессий. Cake приостановит сессии, сгенерирует новые id, а файлы старых сессий удалит, опираясь на установки, которые вы здесь укажите. Возможные значения:

  1. high: время конца сессии через 10 минут неактивности, а id-номера сессии будут перегенерироваться при каждом запросе.
  2. medium: время конца сессии через 20 минут неактивности
  3. low: время конца сессии через 30 минут неактивности

CAKE_SESSION_SAVE: Установите предпочтительный способ сохранения данных сессий. Возможные значения:

  1. cake: Данные сессии сохраняются в tmp/ в корневом каталоге Cake.
  2. php: Данные сессии сохраняются так, как это указано в php.ini
  3. database: Данные сессии сохраняются в базу данных, соединяясь с ней по настройкам, указанным в переменной 'default'.

Настройка роутов


“Routing” это упрощенный чисто-PHP mode_rewrite – который может преобразовывать ссылки в контроллер/действия/параметры и назад. Эта возможность была добавлена в Cake, чтобы сделать красивые ссылки более настраиваемыми и отделить нас от обязательного mod_rewrite. Однако, использование mod_rewite сделает вашу адресную строку более аккуратной и чистой.


Роуты это индивидуальные правила, которые преобразовывают ссылки в специфические контроллеры и действия. Роуты настраиваются в файле app/config/routes.php. Установки выглядят примерно так:

Образец роута

<?php
$Route
->connect (
    
'URL',
    array(
'controller'=>'controllername',
    
'action'=>'actionname''firstparam')
);
?>


Где:

  1. URL это регулярное выражение Cake, ссылка которую вы хотите преобразовать,
  2. controllername это имя контроллера, который вы хотите активизировать,
  3. actionname это имя действия контроллера, которое вы хотите активизировать,
  4. и firstparam это значения первого параметра действия, которое вы вызываете.

Любые параметры, следующие за firstparam также будут вставлены как параметры действия контроллера.


Следующий пример трансформирует все ссылки начинающиеся с /blog в контроллер Blog Controller?. По умолчания действие будет Blog Controller?::index().

Пример роута

<?php
$Route
->connect ('/blog/:action/*', array('controller'=>'Blog''action'=>'index'));
?>

Ссылкой вида /blog/history/05/june можно управлять так:

Управление роутом в контроллере

<?php
class BlogController extends AppController
{
 function 
history ($year$month=null)
 {
   
// .. Отобразить подходящий контент
 
}
}
?>


'history' из ссылки подбирается посредством :action route Blog'a. Элементы ссылки подбираются * к активному методу управления параметрами контроллера, отсюда $year и $month. Вызванная ссылкой /blog/history/05 функция history() будет использовать лишь один параметр 05.


Следующий пример это роут по умолчанию в Cake PHP? используется для установки роута для Pages Controller?::display('home'). Домашняя страница (Home) это отображение, которое можно изменить созданием файла /app/views/pages/home.thtml.

Установка роута по умолчаний

<?php
$Route
->connect ('/', array('controller'=>'Pages''action'=>'display''home'));
?>

Продвинутая настройка роута: Admin Routing и веб-службы


Есть несколько настроек в /app/config/core.php благодаря которым вы можете сделать ваши ссылки более понятными для вас и ваших посетителей.


Первая из них это admin routing. Если ваши приложения используют Products Controller? или News Controller?, вы можете решить сделать несколько ссылок для пользователей с привилегиями администратора, которые дадут доступ к некоторым действиям этих контроллеров. Для того, чтобы ссылки имели приятный и простой вид некоторые люди отдают предпочтение /admin/products/add и /admin/news/post, нежели /products/adminAdd или /news/adminPost.


Чтобы это сделать, первым делом, раскомментируйте строку CAKE_ADMIN в файле /app/config/core.php. По умолчанию ее значение 'admin', но вы можете установить любое, которое вам нравится. Запомните строку, она понадобится вам в ваших административных действиях в вашем контроллере. Так что, действия администратора в этом случае будут именоваться admin_actionName(). Вот некоторые примеры настроек ссылок, CAKE_ADMIN и контроллера:



Использование роутов админа позволяет вам сохранять логическую огранизацию и упрощает выполнение роута. Если возможность включена, то вы можете с легкостью определить в контроллере, админ ли получает доступ, используя: $this->params[CAKE_ADMIN]; или $this->params['admin']; (полагая что 'admin' это значение CAKE_ADMIN).


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


Так же, вы можете включить веб-сервисы роутов в Cake. У вас есть действие контроллера, которое вы хотите сделать видимым? Первое, что нужно сделать это установить значение WEBSERVICES 'on' в /app/config/core.php. Это откроет некоторые автоматические роуты, чем-то напоминающие routing админа, за исключением того, что точные настройки приставок роутов являются доступными:

  1. rss 
  2. xml 
  3. rest
  4. soap
  5. xmlrpc

Что это дает? Это позволяет вам предоставлять альтернативные отображения, которые будут автоматически доступны из /rss/controllerName/actionName или /soap/controllerName/actionName. Это позволяет вам создавать одно действие, которое будет иметь два отображения: одно для обычных просмотрщиков HTML, другое для пользователей веб-сервисов. Делая это, вы можете с легкостью дать большую функциональность ваших приложений пользователям через веб-сервисы.


Например, скажем у меня есть кое-какой код в моем приложении, который говорит пользователям о том кто звонит мне в офис. У меня уже есть HTML-отображение для этих данных, но я хочу предложить эту функцию еще и в XML, чтобы этой услугой можно было воспользоваться из виджетов для рабочего стола. Первое, что мне надо, это включить routing веб-сервисов Cake'а:

/app/config/core.php (частично)
<?
/**
 *  define ниже используется для включения веб-сервисов cake
 *  допустимые значания on или off. По умолчанию off.
 */
    
define('WEBSERVICES''on');
?>


Далее, я могу писать свой код как обычно:

messages_controller.php
<?php
class PhonesController extends AppController
{
    function 
doWhosOnline()
    {
        
// тут мы производим действия чтобы узнать кто сейчас звонит...

        // Если я хочу сделать доступным это действие через xml webservices route Cake'а,
        // мне необходимо будет включить отображение в /app/views/posts/xml/do_whos_online.thtml.
        // Замечание: отображение по умолчанию, используемое здесь, находится в /app/views/layouts/xml/default.thtml.

        // Если пользователь сделает запрос /phones/doWhosOnline, он получит HTML версию.
        // Если пользователь сделает запрос /xml/phones/doWhosOnline,он получит XML версию.
    
}
}
?>

(Опционально) Свои настройки инфлекций


Система именования Cake может быть очень удобной – вы можете назвать свою модель Box, свой контроллер Boxes – и все работает. Есть возможность (особенно для наших, не говорящих по-английски, друзей), когда вы можете столкнуться с ситуацией, где инфлектор Cake'а (класс который делает множественное число, единичное число и подчеркивание) может работать не так как вы этого хотели. Если Cake не может понять во множественном или единственном числе вы даете ему слово, все что вам нужно сделать это изменить по своему настройки инфлекторов.


Найдите файл /app/config/inflections.php – это список переменных Cake, которые вы можете использовать для настройки множественного/единственного числа имен классов в Cake, вместе с объявлением терминов, которые не нужно вообще инфлектировать (например Fish или Deer (олень, олени)) вместе с неправильными глаголами.


Следуйте комментариям внутри файла, изменяя настройки, или используйте примеры, что есть в файле, раскомментировав их. Возможно вам понадобятся некоторые знания регулярных выражений перед тем, как начать работать с файлом.


 
Комментарии

Имена таблиц, которые будут использованы Cake'ом должны состоять из английских слов во множественном числе, как “users”, “authors” или “articles”. Заметьте, что соответствующие модели необходимо называть в единственном числе.


А если “company” во множественном числе будет “companies”, то система не работает! Представьте себе, насколько вульгарно будет выглядеть ссылка – "http://www.site.com/companys" или "http://www.site.com/partys". Это конкретный прокол в концепции.

193.41.195.66 (2008-02-26 01:01:54)

Вам ничто не мешает воспользоваться роутами или инфлекциями. Вы невнимательно прочитали параграф.

AntonIsaykin (2008-02-26 07:02:11)

Спасибо! Действительно, про взаимосвязь с роутами не сразу подумал :)

193.41.195.66 (2008-02-27 00:20:30)

«Параметр 'connect' в $default позволяет указать устойчивым ли будет соединение с базой данных или нет»
Формулировка пугает новичка.
Лучше «Параметр 'connect' в $default позволяет указать поддерживать ли постоянное соединение с базой данных или нет»

77.52.254.115 (2008-04-18 19:42:01)
«Вам ничто не мешает воспользоваться роутами или инфлекциями»

Пожалуйста, покажите это на примере
91.198.86.131 (2009-11-14 18:00:01)
Добавить комментарий:

Файлы [Скрыть файлы/форму]