Статьи

Классный материал, который я узнал о Laravel 4

Я начал использовать Laravel 4 для тестирования, хобби-проектов и реальной работы (ха!) Пару месяцев назад и был искренне рад обновлениям, а также функциям, о которых я не знал и в предыдущих версиях. Так что здесь идет:)

Композитор и автозагрузка

Если вы работали с L3, вы помните, что реальной автозагрузки не было, и что установка комплекта происходила через Artisan и через «рыночную площадку» (так сказать) на сайте Laravel. Все изменилось к лучшему в L4. Не то чтобы система была плохой, она была на самом деле довольно хорошей, поскольку многие пакеты Packagist были преобразованы в стиль кодирования Laravel, но она была ограничена. Здесь Composer вступает в игру. Composer — это современный менеджер зависимостей, установщик и автозагрузчик классов. По сути, он позволяет вам указать файл JSON с разными пакетами и запустить файл Composer.phar для загрузки или обновления этих пакетов.

Не только это, но, если вы помните L3, «автозагрузка» происходила либо путем перетаскивания новых библиотек в папку / library либо путем указания новой папки в одном из стартовых файлов (я не могу вспомнить, какой именно). Теперь все гораздо лаконичнее.

Ну так что ты делаешь? Откройте файл composer.json в вашей установке (возможно, вы даже установили Laravel таким образом). Вы увидите раздел «автозагрузка». Вот:

	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php"
		]
	},

В разделе «Автозагрузка» вы можете указать любые новые папки, которые Composer просматривает и добавляет в свою автозагрузку. Если вы пишете библиотеку для своего конкретного анализа, вы можете добавить ее в пользовательскую папку. Давайте назовем это «парсерами» и добавим в папку Laravel. Добавьте каталог в файл composer.json:

	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php",
			"parsers"
		]
	},

Запустив следующую команду:

php composer.phar install

Ваш класс анализатора добавлен в глобальную область видимости. Вы можете в значительной степени вызывать его в любом месте приложения. Однако Composer также позволяет устанавливать различные пакеты и указывать их как зависимости. Допустим, вы хотите добавить анализатор Markdown в свое приложение. Вы просто измените часть «require» файла JSON (composer.json):

	"require": {
		"laravel/framework": "4.0.*"
		"dflydev/markdown" : "1.*"
	},

При повторном запуске install пакет будет загружен и установлен в каталог / vendor . Аккуратно, верно? :)Узнайте больше об инструменте, так как он используется одинаково во всех дружественных для композиторов проектах.

Переопределить поля по умолчанию

Вы можете переопределить поля ORM по умолчанию, такие как «create_at» и «updated_at», сбросив константу, управляющую ими в вашей модели. Например, в вашей модели user.php вы можете сделать:

const CREATED_AT = 'creation_date';

если ваш эквивалент «selected_at» равен «creation_date». Вы по-прежнему будете получать информацию об этом, используя $ user-> creation_date; однако теперь он будет вести себя так же, как и собственный столбец созданный_каталог. Если вы укажете обновленный столбец таким образом, он будет обновляться с помощью «прикосновения» так же, как и updated_at.

Простое создание контроллеров RESTful и ресурсов

Вы можете легко создать структуру контроллера с помощью команды Artisan, которая создает «ресурсный» контроллер. Контроллер предназначен для маршрутизации следующим образом:

Route::resource('path', 'someController');

и быть использованы в RESTful манере. Очень полезно для создания API.

Существуют также «ресурсные» контроллеры, которые связываются аналогичным образом, за исключением того, что они основаны на общих соглашениях REST:

Ресурс-контроллер

 

Довольно простой и полезный материал. :)

Помни, помни

Чтобы кэшировать результаты вашего запроса, вы можете просто добавить предложение Remember (100), чтобы запомнить результаты вашего запроса за указанное количество минут, например:

User::where('active', '=', '1')->remember(100)->get();

Это запомнит всех пользователей с активным столбцом, помеченным как «1», в течение 100 минут. Всякий раз, когда вы используете этот запрос, он не будет связываться с базой данных, а вместо этого будет использовать кеш: ОЧЕНЬ полезно. Представьте себе создание сложного гигантского зверя запроса, и вместо того, чтобы запускать его несколько раз в течение запроса пользователя, вы можете просто его кешировать!:)

Области применения

Вы можете легко создать свою собственную функцию для добавления к запросу в вашей модели. Например, всякий раз, когда вы вызываете ваши последние комментарии, вы можете позвонить ассоциированным пользователям и, возможно, авторам комментариев (людям, которые проголосовали за это, понравилось или добавили +1). Учитывая, что у вас уже установлены отношения, вы можете создать функцию в вашей модели:

public function scopeFullComments($query){ return $query->with('upvoters', 'user'); }

и назовите это в своем запросе так:

Comment::fullComments()->where('parent', '=', '55')->get();

Таким образом, вместо того, чтобы запоминать все требуемые отношения, вы можете создавать функции области видимости, которые помогут вам. Вы можете создать один для чего угодно. Если вам часто нужна эта информация «fullComment», создайте эту функцию.

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

Передача переменных по представлению

Вы можете передавать определенную информацию всякий раз, когда создается конкретное представление. Например, каждая из ваших страниц, которая использует ваш «основной» шаблон, или что-то еще, возможно, должна знать, вошел ли пользователь в систему. Вместо создания фильтров или конкретной логики для маршрута, вы можете напрямую внедрить эту логику в ваше представление. ,

В моем случае я создаю веб-сайт, который будет отображать список основных категорий как часть меню, поэтому каждый раз, когда я вызываю свой обычный шаблон, мне нужно, чтобы моя модель $ category была полностью насыщенной и готовой для анализа. Я могу включить эту логику непосредственно в мой файл blade-сервера (не очень хорошая идея!), Через маршрут (через каждый отдельный маршрут, плохая идея) или с помощью View Composer.

Вот как это сделать:

Создайте папку, в которой вы хотите хранить свои композиторы представлений (я создал viewComposers в laravel / app ).

Создайте файл, отражающий имя класса, который вы будете использовать, и добавьте следующий код:

<?php
//pick a class name
class basicComposer {

	public function compose($view)
	{
		//getting data
		$mainCategories = Category::->remember(600)->get();
               //passing it off
		$view->with('mainCategories', $mainCategories);
	}
}

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

Отлично, возьмите rout.php и давайте свяжем композитор с представлением:

View::composer('templates.main', 'basicComposer');

Вы почти закончили, теперь вам просто нужно добавить свои viewComposers папки в composer.json файл в Laravel папке:

	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php",
			"app/viewComposers"
		]
	},

И наконец, давайте переделаем нашу автозагрузку, чтобы Laravel знал о нашем классе basicComposer.

php artisan dump-autoload

Это оно! :)Вы можете прочитать об этом в документах Laravel, но на самом деле есть не намного больше, чем то, что я только что сказал.

Базы данных и посев

Я на самом деле написал об этом, но вот краткий обзор:

  • Миграции Laravel позволяют вам «вносить изменения» в вашу базу данных и вносить обновления, которые вы можете легко откатить. Что я имею в виду? Вы можете создать «миграцию» (файл PHP), которая указывает, когда вы хотите добавить столбец, добавить таблицу или что-то еще. Вы также указываете, что вы хотите сделать, чтобы «откатиться». Например, опуская стол.
  • Сеялки позволяют вам вводить исходные данные в ваши таблицы. Это отлично подходит для сред тестирования, где вы можете заполнить данные тестирования.
  • Artisan commands allow you to completely wipe and rebuild your database with one command. Again, wonderful for testing environments, installations, and resets.
  • It’s all super easy to do.

Go ahead and read my article on the topic, but outside of that, that’s the gist of it. I was excited to learn how in-depth Laravel’s migration and seeding capabilities are, and this kind of stuff make it easier to set up a working test environment with Vagrant or wherever else.

What Else?

This is as far as I’ve gotten with Laravel 4. It’s a very neat framework and it’s definitely a HUGE step up from L3 (which was already amazing as hell). What’s even better is the fact that I had no trouble whatsoever setting up a Vagrant testing environment for L4 due to its neat migrations and seeding as well as Composer usage.

If you know of any other sweet features, let me know and I’ll add them to the list. :)

Reader Suggested

Fluent/Eloquent Lists

When using Fluent/Eloquent, you can use the “lists” method to quickly build an array of data that can easily populate the Form::select() HTML helper.

$categories = Categories::orderBy('type')->lists('type', 'id');
Form::select('category_id', $categories );

The resulting array will populate the option value as the “id” field from the DB and the “type” will populate what value appears in the drop down. For example: <OPTION value=”id”>type</OPTION> So you can adapt that pattern to whatever you want the resulting array to look like. In this example, the array is indexed by my id column with the value of each “type”.

(source)

Query Dump

DB::listen(function($sql, $bindings, $time)
{
    var_dump($sql);
    var_dump($bindings);
});

Put this in your App::before filter and you’ll get a nice, ugly dump of the queries being run against your database.

This is great when you’re getting started with Eloquent and just want to know what the hell the actual SQL looks like.

(source)