Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Примечание Ищете еще более простой способ разработки приложений Laravel на macOS? Посмотрите Laravel Herd. Herd включает все необходимое для начала разработки Laravel, включая Valet, PHP и Composer.
Laravel Valet - это среда разработки для macOS, созданная для минималистов. Laravel Valet настраивает ваш Mac для постоянного запуска Nginx на фоне при запуске вашей машины. Затем, используя DnsMasq, Valet направляет все запросы по домену *.test
на установленные на вашем локальном компьютере сайты.
Другими словами, Valet - это быстрая среда разработки Laravel, которая использует примерно 7 МБ оперативной памяти. Valet не является полной заменой Sail или Homestead, но предоставляет отличную альтернативу, если вам нужны гибкие базовые возможности, предпочитаете экстремальную скорость или работаете на машине с ограниченным объемом оперативной памяти.
Из коробки поддержка Valet включает в себя, но не ограничивается следующими возможностями:
Тем не менее, вы можете расширить функциональность Valet с помощью своих собственных драйверов.
Внимание Для установки Valet требуется macOS и Homebrew. Перед установкой убедитесь, что никакие другие программы, такие как Apache или Nginx, не привязаны к порту 80 вашей локальной машины.
Для начала убедитесь, что Homebrew обновлен с помощью команды update
:
brew update
Затем используйте Homebrew для установки PHP:
brew install php
После установки PHP вы готовы установить менеджер пакетов Composer. Кроме того, убедитесь, что каталог $HOME/.composer/vendor/bin
находится в "PATH" вашей системы. После установки Composer вы можете установить Laravel Valet как глобальный пакет Composer:
composer global require laravel/valet
Наконец, выполните команду install
Valet. Это настроит и установит Valet и DnsMasq. Кроме того, демоны, от которых зависит Valet, будут настроены на запуск при старте вашей системы:
valet install
После установки Valet попробуйте выполнить пинг любого домена *.test
в вашем терминале, используя команду вроде ping foobar.test
. Если Valet установлен правильно, вы должны видеть, что этот домен отвечает на 127.0.0.1
.
Valet автоматически запустит необходимые службы при каждой загрузке вашей машины.
Примечание Вместо изменения глобальной версии PHP вы можете указать Valet использовать версии PHP для каждого сайта с помощью команды
isolate
command.
Valet позволяет вам переключаться между версиями PHP с помощью команды valet use php@version
. Valet установит указанную версию PHP с помощью Homebrew, если она еще не установлена:
valet use php
Вы также можете создать файл .valetrc
в корне вашего проекта. Файл .valetrc
должен содержать версию PHP, которую должен использовать сайт:
php=php@8.1
После создания этого файла вы можете просто выполнить команду valet use
, и команда определит предпочтительную версию PHP сайта, считывая файл.
Внимание Valet обслуживает только одну версию PHP за раз, даже если у вас установлено несколько версий PHP.
Если вашему приложению требуется база данных, посмотрите DBngin, предоставляющий бесплатный инструмент управления базой данных, включающий MySQL, PostgreSQL и Redis. После установки DBngin вы можете подключиться к своей базе данных по адресу 127.0.0.1
с использованием имени пользователя root
и пустой строки в качестве пароля.
Если у вас возникли проблемы с запуском вашей установки Valet, выполнение команды composer global require laravel/valet
, а затем valet install
, сбросит вашу установку и может решить различные проблемы. В редких случаях может потребоваться "жесткий сброс" Valet с помощью выполнения valet uninstall --force
, а затем valet install
.
Вы можете обновить вашу установку Valet, выполнив команду composer global require laravel/valet
в вашем терминале. После обновления рекомендуется выполнить команду valet install
, чтобы Valet мог внести дополнительные изменения в ваши конфигурационные файлы, если это необходимо.
Если вы обновляетесь с Valet 3 на Valet 4, выполните следующие шаги для правильного обновления вашей установки Valet:
.valetphprc
для настройки версии PHP для вашего сайта, переименуйте каждый файл .valetphprc
в .valetrc
. Затем добавьте php=
в существующее содержимое файла .valetrc
.После установки Valet вы готовы начать обслуживать ваши приложения Laravel. Valet предоставляет две команды для помощи вам в обслуживании ваших приложений: park
и link
.
park
Команда park
регистрирует каталог на вашем компьютере, который содержит ваши приложения. После того как каталог был "припаркован" Valet, все каталоги внутри этого каталога будут доступны в вашем веб-браузере по адресу http://<directory-name>.test
:
cd ~/Sites valet park
Вот и все. Теперь любое приложение, созданное в вашем "припаркованном" каталоге, будет автоматически обслуживаться с использованием соглашения http://<directory-name>.test
. Таким образом, если ваш припаркованный каталог содержит каталог с именем "laravel", то приложение внутри этого каталога будет доступно по адресу http://laravel.test
. Кроме того, Valet автоматически позволяет вам получить доступ к сайту с использованием поддоменов-маски (http://foo.laravel.test
).
link
Команда link
также может использоваться для обслуживания ваших приложений Laravel. Эта команда полезна, если вы хотите обслуживать один отдельный сайт в каталоге, а не весь каталог:
cd ~/Sites/laravel valet link
После того как приложение было привязано к Valet с помощью команды link
, вы можете получить доступ к приложению, используя его имя каталога. Таким образом, сайт, который был привязан в приведенном выше примере, можно получить по адресу http://laravel.test
. Кроме того, Valet автоматически позволяет вам получить доступ к сайту с использованием поддоменов-маски (http://foo.laravel.test
).
Если вы хотите обслуживать приложение по другому имени хоста, вы можете передать имя хоста в команду link
. Например, вы можете выполнить следующую команду, чтобы сделать приложение доступным по адресу http://application.test
:
cd ~/Sites/laravel valet link application
Конечно же, вы также можете обслуживать приложения на поддоменах с использованием команды link
:
valet link api.application
Вы можете выполнить команду links
, чтобы отобразить список всех ваших привязанных каталогов:
valet links
Команда unlink
может быть использована для удаления символической ссылки для сайта:
cd ~/Sites/laravel valet unlink
По умолчанию Valet обслуживает сайты по протоколу HTTP. Однако, если вы хотите обслуживать сайт через зашифрованный TLS с использованием HTTP/2, вы можете использовать команду secure
. Например, если ваш сайт обслуживается Valet по домену laravel.test
, вы должны выполнить следующую команду для его защиты:
valet secure laravel
Чтобы "разблокировать" сайт и вернуться к обслуживанию его трафика через обычный HTTP, используйте команду unsecure
. Как и команда secure
, эта команда принимает имя хоста, который вы хотите сделать незащищенным:
valet unsecure laravel
Иногда вам может потребоваться настроить Valet для обслуживания "стандартного" сайта вместо 404
при посещении неизвестного домена test
. Для этого вы можете добавить опцию default
в ваш файл конфигурации ~/.config/valet/config.json
с указанием пути к сайту, который должен служить вашим стандартным сайтом:
"default": "/Users/Sally/Sites/example-site",
По умолчанию Valet использует вашу глобальную установку PHP для обслуживания ваших сайтов. Однако, если вам нужно поддерживать несколько версий PHP для различных сайтов, вы можете использовать команду isolate
для указания, какую версию PHP должен использовать конкретный сайт. Команда isolate
настраивает Valet на использование указанной версии PHP для сайта, расположенного в текущем рабочем каталоге:
cd ~/Sites/example-site
Если имя вашего сайта не совпадает с именем каталога, содержащего его, вы можете указать имя сайта, используя опцию --site
:
Для удобства вы можете использовать команды valet php
, composer
и which-php
для переадресации вызовов соответствующих PHP CLI или инструмента на основе конфигурированной версии PHP сайта:
valet phpvalet composervalet which-php
Вы можете выполнить команду isolated
, чтобы отобразить список всех ваших изолированных сайтов и их версий PHP:
valet isolated
Чтобы вернуть сайт обратно к глобальной установке PHP Valet, вы можете вызвать команду unisolate
из корневого каталога сайта:
valet unisolate
Valet включает команду для обмена вашими локальными сайтами с миром, предоставляя простой способ тестирования вашего сайта на мобильных устройствах или обмена им с членами команды и клиентами.
Из коробки Valet поддерживает обмен вашими сайтами через ngrok или Expose. Перед обменом сайтом вы должны обновить вашу конфигурацию Valet с использованием команды share-tool
, указав либо ngrok
, либо expose
:
valet share-tool ngrok
Если вы выберете инструмент и у вас его нет установлено через Homebrew (для ngrok) или Composer (для Expose), Valet автоматически предложит вам установить его. Конечно же, для обоих инструментов требуется аутентификация в вашей учетной записи ngrok или Expose, прежде чем вы сможете начать обмен сайтами.
Чтобы обменяться сайтом, перейдите в каталог сайта в вашем терминале и выполните команду share
от Valet. Общедоступный URL будет помещен в ваш буфер обмена и готов к вставке прямо в вашем браузере или для обмена с вашей командой:
cd ~/Sites/laravel valet share
Для прекращения обмена вашим сайтом вы можете нажать Control + C
.
Внимание Если вы используете пользовательский DNS-сервер (например,
1.1.1.1
), ngrok sharing может не работать правильно. Если это так на вашей машине, откройте системные настройки Mac, перейдите в настройки сети, откройте дополнительные настройки, затем перейдите на вкладку DNS и добавьте127.0.0.1
в качестве вашего первого DNS-сервера.
Обмен вашим сайтом с использованием ngrok требует создания учетной записи ngrok и установки токена аутентификации. После получения токена аутентификации вы можете обновить вашу конфигурацию Valet с использованием этого токена:
valet set-ngrok-token YOUR_TOKEN_HERE
Примечание Вы можете передавать дополнительные параметры ngrok в команду share, такие как
valet share --region=eu
. Дополнительную информацию можно найти в документации ngrok.
Обмен вашим сайтом с использованием Expose требует создания учетной записи Expose и аутентификации в Expose с использованием вашего токена аутентификации.
Вы можете проконсультироваться с документацией Expose для получения информации о дополнительных параметрах командной строки, которые он поддерживает.
По умолчанию Valet ограничивает входящий трафик до внутреннего интерфейса 127.0.0.1
, чтобы ваша рабочая машина не была подвергнута рискам безопасности из Интернета.
Если вы хотите разрешить другим устройствам в вашей локальной сети доступ к сайтам Valet на вашей машине по IP-адресу вашей машины (например, 192.168.1.10/application.test
), вам нужно вручную отредактировать соответствующий файл конфигурации Nginx для этого сайта, чтобы удалить ограничение на директиву listen
. Вы должны удалить префикс 127.0.0.1:
перед директивой listen
для портов 80 и 443.
Если вы не выполнили команду valet secure
для проекта, вы можете открыть сетевой доступ для всех не-HTTPS сайтов, отредактировав файл /usr/local/etc/nginx/valet/valet.conf
. Однако, если вы предоставляете сайт по HTTPS (вы выполнили valet secure
для сайта), то вы должны отредактировать файл ~/.config/valet/Nginx/app-name.test
.
После обновления конфигурации Nginx выполните команду valet restart
, чтобы применить изменения конфигурации.
Некоторые приложения, использующие другие фреймворки, могут зависеть от переменных среды сервера, но не предоставляют способа для их конфигурации внутри вашего проекта. Valet позволяет настраивать переменные среды для конкретного сайта, добавив файл .valet-env.php
в корень вашего проекта. Этот файл должен возвращать массив пар сайт / переменная среды, которые будут добавлены к глобальному массиву $_SERVER
для каждого сайта, указанного в массиве:
<?php return [ // Установить $_SERVER['key'] в "value" для сайта laravel.test... 'laravel' => [ 'key' => 'value', ], // Установить $_SERVER['key'] в "value" для всех сайтов... '*' => [ 'key' => 'value', ],];
Иногда вам может потребоваться проксировать домен Valet на другой сервис на вашей локальной машине. Например, иногда вам может потребоваться запустить Valet, работая также с отдельным сайтом в Docker; однако Valet и Docker не могут оба привязываться к порту 80 одновременно.
Для решения этой проблемы вы можете использовать команду proxy
для создания прокси. Например, вы можете проксировать весь трафик с http://elasticsearch.test
на http://127.0.0.1:9200
:
# Proxy over HTTP...valet proxy elasticsearch http://127.0.0.1:9200 # Proxy over TLS + HTTP/2...valet proxy elasticsearch http://127.0.0.1:9200 --secure
Вы можете удалить прокси с помощью команды unproxy
:
valet unproxy elasticsearch
Вы можете использовать команду proxies
для вывода списка всех конфигураций сайтов, которые проксируются:
valet proxies
Вы можете написать свой собственный Valet "драйвер", чтобы обслуживать PHP-приложения, работающие на фреймворке или CMS, который не поддерживается непосредственно Valet. При установке Valet создается каталог ~/.config/valet/Drivers
, содержащий файл SampleValetDriver.php
. Этот файл содержит образец реализации драйвера, чтобы продемонстрировать, как написать собственный драйвер. Написание драйвера требует реализации трех методов: serves
, isStaticFile
и frontControllerPath
.
Все три метода получают значения $sitePath
, $siteName
и $uri
в качестве аргументов. $sitePath
- это полный путь к сайту, обслуживаемому на вашей машине, например /Users/Lisa/Sites/my-project
. $siteName
- это часть домена "хост" / "название сайта" (my-project
). $uri
- это URI входящего запроса (/foo/bar
).
После завершения написания вашего собственного драйвера Valet поместите его в каталог ~/.config/valet/Drivers
, используя соглашение об именовании FrameworkValetDriver.php
. Например, если вы пишете собственный драйвер Valet для WordPress, ваше имя файла должно быть WordPressValetDriver.php
.
Давайте рассмотрим образец реализации каждого метода, который должен реализовать ваш собственный драйвер Valet.
serves
Метод serves
должен возвращать true
, если ваш драйвер должен обрабатывать входящий запрос. В противном случае метод должен вернуть false
. Таким образом, внутри этого метода вы должны попытаться определить, содержит ли данный $sitePath
проект того типа, который вы пытаетесь обслуживать.
Например, представим, что мы пишем WordPressValetDriver
. Наш метод serves
может выглядеть примерно так:
/** * Определить, обслуживает ли драйвер запрос. */public function serves(string $sitePath, string $siteName, string $uri): bool{ return is_dir($sitePath.'/wp-admin');}
isStaticFile
Метод isStaticFile
должен определить, предназначен ли входящий запрос для файла "статического" типа, такого как изображение или таблица стилей. Если файл статический, метод должен вернуть полный путь к статическому файлу на диске. Если входящий запрос не предназначен для статического файла, метод должен вернуть false
:
/** * Определить, предназначен ли входящий запрос для статического файла. * * @return string|false */public function isStaticFile(string $sitePath, string $siteName, string $uri){ if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) { return $staticFilePath; } return false;}
Внимание Метод
isStaticFile
будет вызван только если методserves
вернетtrue
для входящего запроса, и URI запроса не/
.
frontControllerPath
Метод frontControllerPath
должен возвращать полный путь к "фронт-контроллеру" вашего приложения, который обычно является файлом "index.php" или эквивалентом:
/** * Получить полностью разрешенный путь к контроллеру сайта. */public function frontControllerPath(string $sitePath, string $siteName, string $uri): string{ return $sitePath.'/public/index.php';}
Если вы хотите определить собственный драйвер Valet для одного приложения, создайте файл LocalValetDriver.php
в корневом каталоге приложения. Ваш собственный драйвер может расширять базовый класс ValetDriver
или расширять существующий драйвер, специфичный для приложения, такой как LaravelValetDriver
:
use Valet\Drivers\LaravelValetDriver; class LocalValetDriver extends LaravelValetDriver{ /** * Определить, обслуживает ли драйвер запрос. */ public function serves(string $sitePath, string $siteName, string $uri): bool { return true; } /** * Получить полностью разрешенный путь к контроллеру сайта. */ public function frontControllerPath(string $sitePath, string $siteName, string $uri): string { return $sitePath.'/public_html/index.php'; }}
Команда | Описание |
---|---|
valet list |
Вывести список всех команд Valet. |
valet diagnose |
Вывести диагностику для помощи в отладке Valet. |
valet directory-listing |
Определить поведение списка каталогов. По умолчанию "off", что вызывает страницу 404 для каталогов. |
valet forget |
Запустите эту команду из "припаркованного" каталога, чтобы удалить его из списка припаркованных каталогов. |
valet log |
Просмотр списка журналов, записанных службами Valet. |
valet paths |
Просмотр всех ваших "припаркованных" путей. |
valet restart |
Перезапустить службы Valet. |
valet start |
Запустить службы Valet. |
valet stop |
Остановить службы Valet. |
valet trust |
Добавить файлы sudoers для Brew и Valet, чтобы разрешить выполнение команд Valet без запроса пароля. |
valet uninstall |
Удалить Valet: показывает инструкции для ручной деинсталляции. Передайте опцию --force , чтобы агрессивно удалить все ресурсы Valet. |
При отладке проблем с вашим окружением Valet вам может быть полезна следующая информация о каталогах и файлах:
~/.config/valet
Содержит всю конфигурацию Valet. Рекомендуется делать резервную копию этого каталога.
~/.config/valet/dnsmasq.d/
В этом каталоге находится конфигурация DNSMasq.
~/.config/valet/Drivers/
В этом каталоге находятся драйверы Valet. Драйверы определяют, как конкретный фреймворк / CMS обслуживается.
~/.config/valet/Nginx/
В этом каталоге находятся все конфигурации сайтов Nginx Valet. Эти файлы пересоздаются при выполнении команд install
и secure
.
~/.config/valet/Sites/
В этом каталоге находятся все символические ссылки для ваших связанных проектов.
~/.config/valet/config.json
Этот файл - мастер-файл конфигурации Valet.
~/.config/valet/valet.sock
Этот файл - сокет PHP-FPM, используемый установкой Nginx Valet. Он существует только в том случае, если PHP работает правильно.
~/.config/valet/Log/fpm-php.www.log
Этот файл - пользовательский журнал ошибок PHP.
~/.config/valet/Log/nginx-error.log
Этот файл - пользовательский журнал ошибок Nginx.
/usr/local/var/log/php-fpm.log
Этот файл - системный журнал ошибок PHP-FPM.
/usr/local/var/log/nginx
В этом каталоге находятся журналы доступа и ошибок Nginx.
/usr/local/etc/php/X.X/conf.d
В этом каталоге находятся файлы *.ini
для различных настроек конфигурации PHP.
/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf
Этот файл - файл конфигурации пула PHP-FPM.
~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf
Этот файл - конфигурация Nginx по умолчанию, используемая для создания SSL-сертификатов для ваших сайтов.
С macOS 10.14 доступ к некоторым файлам и каталогам по умолчанию ограничен. Сюда входят каталоги Рабочего стола, Документов и Загрузок. Кроме того, ограничен доступ к сетевым томам и сменным томам. Поэтому рекомендуется размещать папки сайтов вне этих защищенных мест.
Однако, если вы хотите обслуживать сайты из одного из этих мест, вам нужно предоставить Nginx "Полный доступ к диску". В противном случае вы можете столкнуться с ошибками сервера или другим непредсказуемым поведением от Nginx, особенно при обслуживании статических ресурсов. Обычно macOS автоматически предложит вам предоставить Nginx полный доступ к этим местам. Или вы можете сделать это вручную через Настройки системы
> Безопасность и конфиденциальность
> Конфиденциальность
и выбор Полный доступ к диску
. Затем разрешите любые записи nginx
в главном окне.