CakePHP
Ещё весной после завершения работы над очередным сайтом я понял, что пора что-то менять в процессе программирования. А именно: найти и освоить подходящий «каркас» (framework) для более быстрой разработки. Пройдясь по нескольким сайтам со сравнениями (например этом), остановился на двух MVC-системах: CakePHP и Code Igniter. Важным условием для меня было и остаётся совместимость с PHP 4.
Решил остановиться на CakePHP из-за более полной документации и сравнительно неплохой поддержки (форум на Google Groups, примеры кода на CakeForge) Выглядит разработка приложения на CakePHP примерно так:
Модель (база данных), предположим, для таблицы users:
class User extends AppModel
{
var $name = 'User';
}
И это всё. Теперь контроллер для пользователей:
class UsersController extends AppController
{
var $name = 'Users';
function index()
{
$this->pageTitle = 'Пользователи';
$this->set('users', $this->User->findAll());
}
function view($id = null)
{
$this->pageTitle = 'Пользователь №'.$id;
$this->User->id = $id;
$this->set('user', $this->User->read());
}
}
Соответственно index() будет обрабатывать индексную страничку /users/, а view() – страничку пользователя /users/view/{id}/.
Ну и шаблон для функции view(), к примеру (файл шаблона называется по имени функции контроллера – view.thtml):
= $user['User']['name'] ?>
Email: = $user['User']['email'] ?> = $user['User']['description'] ?>
Т.е. просто выводим эти переменные в html. Где name, email и description – поля в таблице users.
Когда я делал первый сайт с помощью CakePHP, мне иногда казалось, что раньше я программировал на ASMе.
Хотелось бы отметить также, что CakePHP использует те же самые принципы, что и модный нынче RubyOnRails. Однако CakePHP имеет 1 очень важное преимущество перед RoR: огромная распространённость PHP. Сложно найти хостинг, который не имеет поддержки PHP 4.
28.03.07 в 04:51
А вы не подскажите как работать в связке cakephp+mysql=unicode?
сколько ни пробую, юникод в php файлах отображается на ура, как только я беру данные из mysql, то все в «?????????» в вопросах.
Iñtërnâtiônàlizætiøn не работает….
везде поставил uft8_general_ci
28.03.07 в 10:03
Откройте файл cake/libs/model/dbo/mysql.php (или mysqli.php) и найдите такой код:
if (mysqli_select_db($this->connection, $config['database'])) { $this->connected = true; } после фигурной скобки вставьте: mysqli_query($this->connection, "SET names utf8"); чтобы выглядело примерно так: if (mysqli_select_db($this->connection, $config['database'])) { mysqli_query($this->connection, "SET names utf8"); $this->connected = true; }19.04.07 в 07:05
Спасибо огромное!
Не первый год мучаюсь с этой проблемой. ))
30.05.07 в 19:05
> Не первый год мучаюсь с этой проблемой
Странно… И нашли решение только сейчас??
11.06.07 в 18:17
А в последней стабильно версии CakePHP проблема с кодировкой решается и того проще!)) Нужно в database.php в массив добавить ‘encoding’=>’utf8′! Не нужно рыть исходники самого CakePHP, он все за вас сделает!)) вот такой конфиг у меня получился:
var $default =
array(‘driver’ => ‘mysql’,
‘connect’ => ‘mysql_connect’,
‘host’ => ‘localhost’,
‘login’ => ‘root’,
‘password’ => »,
‘database’ => ‘test’,
‘prefix’ => »,
‘encoding’ => ‘utf8′);
26.08.07 в 21:22
Ребята какие-то занялись переводом английского мануала на русский язык. Думаю всем будет полезно: http://cake-php.ru
17.12.07 в 18:29
Сам перехожу на Cake – просто в восторге от его возможностей!
01.03.08 в 16:46
Огромное спасибо.
у меня почему-то еncoding не заработал
03.04.08 в 21:13
encoding нормально заработал
‘encoding’=>’cp1251′
??????????? теперь для меня не проблема
10.04.08 в 18:29
У меня похожая проблема. Связка mySQL + cakePHP. В базе данных русские буквы нормально отображаются, а если выводить данные из таблицы в документ или просто русские данные выводить в html-документе, то выводятся они в какой-то непонятной кодировке. Если потом вручную в браузере исправить кодировку на windows-1251, то всё становится номрально. Но хочется ведь, чтоб всё автоматом выполнялось. Не подскажете, как это исправить? Где кодировку менять надо – в базе или cakephp?
12.04.08 в 09:20
Марго, последовательность действий для решений проблем с кодировками такая:
1. Убедитесь, что база данных и/или текстовые поля созданы в нужной вам кодировке. Если нет, то поменяйте кодировку при помощи SQL типа:
2. Убедитесь, что соединение в вашем скрипте открывается с нужной кодировкой. В Cake это устанавливается путем настройки параметра encoding в конфиге базы данных database.php:
В других скриптах после соединения с БД нужно посылать специальный SQL для установки кодировки соединения:
И только затем работать с таблицами на чтение и запись.
3. Ну и напоследок убедитесь, что в HTML-коде, выводящем данные из базы, установлена нужная кодировка. Такая же, как и в базе данных, естественно.
Удачи!
21.06.08 в 03:51
Поизучал немного мануал и туториалы, но так и не понял простой вещи, как сделать что-бы на странице было несколько блоков из разных вьюверов? Использовать элементы?
15.08.08 в 17:52
Можно использовать Layout. Создайте несколько необходимых, а в контроллере меняйте их с условием.