Laravel 4.2
После того как мы установили фреймворк на сервер, нужно создать таблицу в базе данных. Таблица будет представлять собой простой пример записи блога, содержащая столбцы: название поста, содержимое поста и столбец счетчика просмотров.
Создадим миграцию для нашей таблицы, используя следующую команду:
php artisan migrate:make create_posts_table --create="posts"
Миграция будет помещена в папку app/database/migrations и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций. Полное имя миграции будет таким: время_создания_create_posts_table.php.
Добавим несколько строк в файл миграции, в функцию "up", чтобы она выглядела следующим образом:
public function up()
{
Schema::create('posts', function(Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->text('content');
$table->integer('view_count')->default(0);
$table->timestamps();
});
}
Далее просто применим созданную миграцию, запустив команду:
php artisan migrate
После чего будет создана таблица с названием "posts". Как делается сидинг данных (seeding) в этой статье рассматривать не будем. Если вы об этом ничего не знаете, то можно просто вручную добавить новые строки в таблицу.
После того как с базой данных мы закончили, мы можем заняться разработкой приложения.
Следующим этапом будет создание модели, контроллера, маршрута, и простого вида.
В первую очередь создадим простую модель "Post" в папке models, пример кода можно взять с сайта laravel.com, по адресу http://laravel.com/docs/4.2/eloquent. Конечный вариант модели будет выглядеть так:
<?php
//Файл: app/models/Post.php
class Post extends Eloquent {
protected $table = 'posts';
}
Далее создадим заготовку контроллера с помощью команды:
php artisan controller:make PostController
После выполнения команды мы получим файл контроллера (PostController.php) в папке controllers. В файле будет куча методов, нужных для обработки и вывода данных(create, show, edit, update, и т.д.). Нам будет нужен только метод show для вывода единичной записи блога.
Откроем файл PostController.php и в секции функции "show($id)" добавим 2 строчки. Первая получает содержимое нужного нам поста из базы. Вторая передает это содержимое в вид. В итоге функция получится такой:
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
$post = Post::find($id);
return View::make('posts.show', compact('post'));
}
Далее пропишем маршрут в файле routes.php:
Route::resource('post', 'PostController');
И осталось нам еще создать вид. В контроллере мы указали "posts.show". То есть вид будет называться "show" и лежать в папке posts. Для чего мы должны ее создать в папке views, и назвать файл "show.blade.php". В нем мы просто выведем содержимое поста. Файл будет выглядеть следующим образом:
id: {{$post->id}}
<br>
Название поста: {{$post->title}}
<br>
Текст поста: {{$post->content}}
<br>
Количество просмотров: {{$post->view_count}}
<br>
Все. С подготовительной частью мы закончили. Можно перейти по адресу http://адрес_вашего_сайта/post/id_поста и на экран будет выведено содержимое записи блога с указанным id. Далее, наконец уже, реализуем сам подсчет просмотров страницы поста. Сделаем мы это с помощью системы событий. Документация об этом на английском языке есть на сайте фреймворка laravel.com, а русский вариант документации представлен на сайте laravel.ru.
Для начала откроем ранее созданный контроллер PostController.php, в секции функции "show" нужно добавить новую строку:
Event::fire('post.view', $post);
Окончательный вид функции будет таким:
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
$post = Post::find($id);
Event::fire('post.view', $post);
return View::make('posts.show', compact('post'));
}
Добавленная строка отвечает за возбуждение события в данном месте. Обратите внимание, что строка события должна быть именно после получения данных из базы, то есть после строки $post = Post::find($id);
Теперь нужно создать файл events.php в папке приложения, он будет содержать код наблюдателя события, который после возбуждения события увеличит значение счетчика в базе данных на единицу. В итоге файл будет выглядеть так:
<?php
//Файл: app/events.php
Event::listen('post.view', function($post)
{
$post->increment('view_count');
});
Но счетчик пока работать не будет так как его еще нужно подключить в файле global.php, в папке приложения (app/start/global.php). Открываем этот файл и инклудим в конец файла файл events.php. Добавить нужно следующий код:
/*
|--------------------------------------------------------------------------
| Require The Events File
|--------------------------------------------------------------------------
*/
require app_path().'/events.php';
Все, теперь можно попробовать поперезагружать страницу с любым постом из блога, в результате число в строке "Количество просмотров" должно инкрементироваться.