Сегодня мы начинаем заключительный цикл скринкастов, посвященный Backbone.js. Мы будем создавать полноценное одностраничное приложение – менеджер контактов.
Всем привет! Начнем с настройки и написания серверной части. Я продолжаю использовать в качестве бэкэнда PHP фреймворк Laravel. Создадим модель Contact и таблицу Contacts в БД. Установим между ними связь и забьем таблицу данными.
Laravel модель:
<?php
class Contact extends Eloquent {
public static $table = 'contacts';
public static $timestamps = false;
}
?>
Команды для создания миграции
php artisan migrate:install
php artisan migrate:make create_contacts_table --table contacts --create
Код миграции:
public function up()
{
Schema::create('contacts', function($stable)
{
$table->increments('id');
$table->string('first_name');
$table->string('last_name');
$table->string('email_address')->unique();
$table->string('description')->nullable();
});
}
Команда самой миграции:
php artisan migrate
Описываем данные в php массивах:
class Seed_Contacts extends \S2\Seed {
public function grow()
{
$contact = new Contact;
$contact->first_name = 'Павел';
$contact->last_name = 'Сидоров';
$contact->email_address = 'sidorov@gmail.com';
$contact->description = 'Повар';
$contact->save();
$contact = new Contact;
$contact->first_name = 'Наталья';
$contact->last_name = 'Сидорова';
$contact->email_address = 'sidorova@gmail.com';
$contact->description = 'Жена повара.';
$contact->save();
$contact = new Contact;
$contact->first_name = 'Иван';
$contact->last_name = 'Петров';
$contact->email_address = 'petrov@gmail.com';
$contact->description = 'Лучший друг повара.';
$contact->save();
}
}
Команда забивающая вышеописанные массивы данных в БД:
php artisan plant::seed all
Создаем контроллер и описываем базовую платформу из методов(actions) взаимодействующих с БД.
Команда создающая контроллер и загатовки для всех необходимых действий:
php artisan generate:controller Contacts index create store show edit update destroy
Код самого контроллера:
<?php
class Contacts_Controller extends Base_Controller {
public function action_index()
{
$fetchAllContacts = Contact::all();
$fetchedAllAttributes = array();
foreach ($fetchAllContacts as $model) {
$fetchedAllAttributes[]=$model->attributes;
}
return json_encode($fetchedAllAttributes);
}
public function action_create()
{
}
public function action_store()
{
$input = Input::json();
Contact::create(array(
'first_name' => $input->first_name,
'last_name' => $input->last_name,
'email_address' => $input->email_address,
'description' => $input->description
));
}
public function action_show($id)
{
return json_encode( Contact::find($id) );
}
public function action_edit($id)
{
}
public function action_update($id)
{
$contact = Contact::find($id);
$input = Input::json();
$contact->first_name = $input->first_name;
$contact->last_name = $input->last_name;
$contact->email_address = $input->email_address;
$contact->description = $input->description;
$contact->save();
}
public function action_destroy()
{
return Contact::find($id)->delete();
}
}
Регистрируем контроллер в routes.php:
Route::controller(Controller::detect());
Теперь подключаю и создаю main.js с кодом нашего глобального объекта приложения и вспомогательной функцией vent (pub/sub – шаблон):
<!doctype html>
<html lang="en">
<head>
<title></title>
</head>
<body>
<h1>Hello World</h1>
<script src="js/underscore.js"></script>
<script src="js/jquery.js"></script>
<script src="js/backbone.js"></script>
<script src="js/main.js"></script>
<script src="js/models.js"></script>
<script src="js/collections.js"></script>
<script src="js/views.js"></script>
<script src="js/router.js"></script>
</body>
</html>
(function() {
window.App = {
Models: {},
Collections: {},
Views: {},
Router: {}
}
window.vent = _.extend({}, Backbone.Events);
}());
На этом сегодня все. До следующего урока!
Источник:loftblog