Статьи

Интересные вещи о Laravel 4

 

laravel4

Я начал использовать 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';

если вашим эквивалентом созданного_дата является создание_даты. Вы по-прежнему будете получать информацию об этом, используя $ 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 минут. Каждый раз, когда вы используете этот запрос, он не будет связываться с базой данных, а вместо этого будет использовать кеш. Очень полезный. Представьте себе создание сложного гигантского зверя запроса, и вместо того, чтобы запускать его несколько раз в течение запроса пользователя, вы можете просто его кешировать!

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

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

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 позволяют вам полностью стереть и перестроить вашу базу данных одной командой. Опять же, замечательно для тестирования сред, установок и перезагрузки.
  • Это все супер легко сделать.

Продолжайте читать мою статью на эту тему, но в остальном в этом суть. Я был взволнован, узнав, насколько глубоки возможности Laravel по миграции и заполнению, и такие вещи облегчают настройку рабочей тестовой среды с Vagrant или где-либо еще.

Что-то еще?

Это то, что я получил с Laravel 4. Это очень аккуратный фреймворк, и это определенно ОГРОМНЫЙ шаг вперед по сравнению с L3 (который уже был потрясающим). Еще лучше то, что у меня не было никаких проблем с настройкой среды тестирования Vagrant для L4 из-за ее аккуратных миграций и заполнения, а также использования Composer.

Если вам известны какие-либо другие полезные функции, дайте мне знать, и я добавлю их в список.

Читатель предложил:

Свободные / Красноречивые Списки

При использовании Fluent / Eloquent вы можете использовать метод «списки», чтобы быстро создать массив данных, который может легко заполнить HTML-помощник Form :: select ().

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

Полученный массив будет заполнять значение опции как поле «id» из БД, а «type» будет заполнять то, какое значение появляется в раскрывающемся списке. Например: <OPTION value = ”id”> type </ OPTION> Таким образом, вы можете адаптировать этот шаблон к тому, что вы хотите, чтобы результирующий массив выглядел. В этом примере массив индексируется моим столбцом id со значением каждого «типа».

( источник )

Query Dump

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

Поместите это в свой фильтр App :: before, и вы получите хороший, уродливый дамп запросов, выполняемых к вашей базе данных.

Это замечательно, когда вы начинаете работать с Eloquent и просто хотите узнать, как, черт возьми, выглядит настоящий SQL.

( источник )