В первой статье о MongoLab я показал вам, как настроить MongoDB для локальной разработки и MongoLab, сервис PaaS, созданный специально для обработки удаленных развертываний базы данных MongoDB.
В этой статье я собираюсь показать вам, как беспрепятственно работать с MongoLab, чтобы продолжить создание простого PHP-приложения, использующего базу данных MongoDB, размещенную на MongoLab.
Я также собираюсь показать вам лучший способ подключения к MongoLab с вашего собственного компьютера. Это устраняет необходимость вообще запускать локальный экземпляр MongoDB.
Улучшено подключение к MongoDB
Кажется, есть проблема с MongDB, где параметры соединения по умолчанию установлены для localhost. Это означает, что, как показано в первой статье, он должен быть запущен, а затем установить соединение с MongoLab через оболочку.
Изменение процесса установки на вашем компьютере для MongoDB решает проблему. На моем Mac я использовал популярный менеджер пакетов HomeBrew для установки MongoDB.
После того, как вы установили HomeBrew, это просто вопрос запуска:
brew install mongodb
из терминала приложение. Обязательно обратите внимание на то, что появляется после завершения установки — здесь приведена очень полезная информация. Я включу это здесь для справки:
==> Caveats
If this is your first install, automatically load on login with:
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/homebrew.mxcl.mongodb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
If this is an upgrade and you already have the homebrew.mxcl.mongodb.plist loaded:
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/homebrew.mxcl.mongodb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Or start it manually:
mongod run --config /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf
The launchctl plist above expects the config file to be at /usr/local/etc/mongod.conf.
If this is a first install, you can copy one from /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf:
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf /usr/local/etc/mongod.conf
==> Summary
А как насчет пользователей Windows?
Рекомендуемый способ установки MongoDB для Windows — через готовые двоичные файлы . Это обеспечит те же возможности, которые описаны в этой статье.
Я на Linux, что мне делать?
На сайте MongoDB есть конкретные советы для популярных дистрибутивов Linux.
Подключение к MongoLab
Я собираюсь предположить, что у вас есть учетная запись, настроенная, как описано в части 1. Если у вас есть, то вы можете перейти в окно консоли / терминала и ввести эту команду (находится в окне базы данных вашей учетной записи MongoLab):
mongo youraccount.mongolab.com:31347/your_database -u <user> -p <password>
Вы будете подключены непосредственно к базе данных, которую вы разместили в облаке на MongoLab. обратно в консоли / тип терминала:
show collections
Это представит список коллекций, которые у вас есть в вашей базе данных. Помните, что коллекция примерно эквивалентна таблице базы данных в языке MongoDB.
Так что теперь у нас есть прямое соединение с нашей базой данных MongoLab, поэтому мы продолжим создавать наше маленькое приложение.
Добавление задач
Так что, если вы будете следовать предыдущей статье, у вас будет основной список задач, отображаемый в вашем браузере. Задачи читаются из нашей базы данных MongoLab, но мы можем работать с данными так же, как если бы мы использовали localhost.
Мы можем добавлять документы через веб-интерфейс MongoLab:
Или вы можете установить один из инструментов GUI, доступных для MongoDB:
- MongoHub — Mac
- MongoVue — Windows
- JMongoBrowser — Windows, Mac, Linux
Это еще одна приятная особенность MongoLab. Возможность подключения к облачной службе означает, что вы можете сделать то же самое из графического интерфейса, указанного выше:
Время для кода
Мы остановились в прошлый раз с отображением списка задач. Было бы хорошо, если бы мы могли добавить задачу через PHP, используя простую веб-форму. Создайте в проекте новый файл с именем «create.php», а затем добавьте в него простую форму:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Add a task</title>
<link type="text/css" rel="stylesheet" href="" />
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<h1>Task Creator</h1>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<h3>Title</h3>
<p><input type="text" name="title" id="title" /></p>
<h3>Status</h3>
<p><input type="text" name="status" id="status" /></p>
<h3>Context</h3>
<p><input type="text" name="context" id="context" /></p>
<p><input type="submit" name="submit" value="Save"/></p>
</form>
</body>
</html>
Обратите внимание, что мы используем PHP_SELF, чтобы отправить форму обратно себе. Таким образом, мы можем сделать простой условный тест, чтобы увидеть, в каком состоянии находится форма.
Подключиться к MongoLab
Далее мы можем написать нашу подпрограмму подключения в верхней части файла для подключения к MongoLab:
<?php
try
{
$connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
$database = $connection->selectDB('your_database');
$collection = $database->selectCollection('tasks');
}
catch(MongoConnectionException $e)
{
die("Failed to connect to database ".$e->getMessage());
}
Вставить рутину документа
Теперь мы можем добавить массив переменных, переданных из формы в виде значений $ _POST в блоке try:
try {
$connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
$database = $connection->selectDB('your_database');
$collection = $database->selectCollection('tasks');
$task = array();
$task['title'] = $_POST['title'];
$task['status'] = $_POST['status'];
$task['context'] = $_POST['context'];
$task['saved_at'] = new MongoDate();
$collection->insert($task);
Здесь нет ничего необычного, кроме вызова $ collection-> insert. Это вызов метода в классе PHP Mongo; он пытается вставить в коллекцию, на которую мы ссылаемся в нашей связи.
Здесь мы можем добавить еще одно исключение «catch», если вставка не работает:
catch(MongoException $e)
{
$die('Failed to insert data '.$e->getMessage());
}
Подключите форму
Теперь все, что нам нужно, это поставить триггер, чтобы проверить: нужно ли показывать форму или сообщение об успешной вставке, в зависимости от того, была ли добавлена запись.
Прямо в верхней части блока PHP создайте пустую переменную с именем $ trigger. Затем добавьте условный тест, чтобы увидеть, установлена ли переменная кнопки отправки формы и имеет ли она значение. Если это так, то мы можем запустить действие сохранения, в противном случае нам просто нужно отобразить форму:
$trigger = "";
if((!empty($_POST['submit'])) && ($_POST['submit'] === 'Save'))
{
$trigger = "do_save";
}
else
{
$trigger = "show_form";
}
Затем мы можем добавить еще один условный тест, чтобы увидеть, какое значение имеет $ trigger, и действовать соответствующим образом. Весь блок PHP теперь выглядит так:
<?php
$trigger = "";
if((!empty($_POST['submit'])) && ($_POST['submit'] === 'Save'))
{
$trigger = "do_save";
}
else
{
$trigger = "show_form";
}
switch($trigger)
{
case 'do_save':
try
{
$connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
$database = $connection->selectDB('andyhawthorne');
$collection = $database->selectCollection('tasks');
$task = array();
$task['title'] = $_POST['title'];
$task['status'] = $_POST['status'];
$task['context'] = $_POST['context'];
$task['saved_date'] = new MongoDate();
$collection->insert($task);
}
catch(MongoConnectionException $e)
{
die("Failed to connect to database ".$e->getMessage());
}
catch(MongoException $e)
{
$die('Failed to insert data '.$e->getMessage());
}
break;
case 'show_form':
default:
}
?>
Вы заметите, что мы добавили поле вставки: $ task [‘save_date’] = new MongoDate (). MongoDB не будет жаловаться, хотя мы раньше не использовали это поле. MongoDate () — это встроенная функция отметки времени в драйвере PHP.
Осталось только сделать следующее:
<?php if ($trigger === 'show_form'): ?>
Добавьте это над открывающим тегом формы. Затем после закрывающего тега формы:
<?php else: ?>
<p>
Task saved. _id: <?php echo $task['_id'];?>.
<a href="<?php echo $_SERVER['PHP_SELF'];?>">Add another task?</a>
</p>
<?php endif;?>
Это ответит на условный тест в верхней части нашего блока PHP.
Попробуйте это
Добавьте несколько записей с новой шикарной формой. Здесь идет большая часть, хотя. При сохранении каждого документа он будет отправлен в вашу базу данных MongoLab:
Обновление и удаление записей
MongoLab пока не поддерживает массовую загрузку из области веб-администрирования, но вы можете создавать, редактировать и удалять документы. Прежде чем мы рассмотрим, как сделать это из PHP, давайте посмотрим на операции CRUD изнутри самого MongoLab.
Когда вы нажмете, чтобы просмотреть определенную коллекцию, вы увидите документы, отображаемые в разбивке по страницам:
Нажатие на «х» действительно удалит документ. Нажав на отдельный документ, вы попадете на экран редактирования:
Отредактируйте, а затем сохраните новую версию. Легко, а?
Как насчет PHP?
Для редактирования документов процесс аналогичен вставке:
- Создать веб-форму
- Подключитесь к MongoLab и получите документ
- Заполните форму с правильной записью
- Сохраните изменения
До сих пор мы видели, как использовать метод $ collection-> find (), который создает набор результатов для всех документов в коллекции. Для выбора отдельного документа мы можем использовать что-то вроде этого:
$id = $_REQUEST['id'];
$task = $collection->findOne(array('_id' => new MongoId($id)));
Чтобы запустить обновление, вы можете создать массив данных формы, такой же, как для вставки, и использовать такой код для запуска обновления:
$id = $_REQUEST['id'];
$collection->update(array('_id' => new MongoId($id)), $form_data);
Где $ form_data — это массив данных, отправленных с вашей веб-формы. Удаление документа следует той же идее:
$id = $_REQUEST['id'];
$collection->remove(array('_id' => new MongoId($id)));
В заключение…
Работать с MongoDB стало намного проще благодаря MongoLab. Тот факт, что она запускает вашу базу данных в облаке, означает, что вы можете разрабатывать и развертывать свое приложение, не заботясь о компонентах базы данных вообще.
В этой статье вы увидели полностью проработанный пример вставки документов через PHP, а также узнали, как управлять этими документами в области веб-администрирования MongoLab. После добавления возможности массовой вставки из области администрирования MongoLab будет иметь все необходимое для развертывания баз данных MongoDB. Уже имеющиеся возможности делают весь процесс создания PHP-приложения на основе MongoDB простым.
Изображение листа через Shutterstock