php artisan serve как остановить
Использование команд консоли Artisan в Laravel
После того как мы устанавливаем Laravel на свой компьютер, нам становится доступен такой инструмент как Artisan.
Artisan – это интерфейс командной строки или CLI-приложение, который позволяет выполнять целое множество команд при разработке веб-приложения на Laravel. Таким образом, является отличным помощником веб-разработчика, который в значительной степени может сократить некоторые рутинные операции при разработке.
Файл с названием «artisan» физически находится в директории сайта Laravel, в терминале мы обращаемся к нему через php с указанием имени этого файла. Для примера, давайте рассмотрим список всех доступных команд, вызвав таким образом справку по интерфейсу.
Просмотр списка доступных команд
В результате выполнения команды в окне консоли мы увидим все доступные команды для этого инструмента.
Как вы можете заметить, команд целое множество. Однако на практике большинство из них может быть и не разу не пригодятся. Далее я решил опубликовать список команд, который могут оказаться полезными в ряде случаев.
Запуск локального сервера
Для генерации нового ключа (обычно создаётся автоматически при установке)
Создание нового файла контроллера
Будет создана папка app/Http/Cotrollers и файл с классом контроллера ContactController.php
Создание файла валидации данных
Будет создана папка app/Http/Requests/, в ней будет создан файл ContactRequest.php
Создание файла — класс модели
где Contact — имя модели, параметр -m добавляет файл миграции
Выполнение миграции базы данных
Файлы миграции базы данных располагаются в отдельной директории /database/migrations/. Эта команда запускает миграцию данных из этих файлов в базу данных.
Отмена миграции на один шаг назад
Если вы выполняли миграцию в несколько шагов, то каждый предыдущий шаг может быть отменён с помощью этой команды.
Отмена миграции на 3 шага назад
Давайте предположим, что вы выполняли команду миграции базы данных несколько раз. После чего последние три миграции по каким-то причинам стало необходимо отменить. Команда отменит последние миграции, и вернёт таблицы в базе в то состояние, как было до этих трёх миграций.
Отмена всех миграций
Выполнив эту команду, все миграции будут отменены, и таблицы в базе данных будут удалены до исходного состояния.
Очистка внутреннего кэша Laravel
Внутренний кэш предназначен для ускорения работы Laravel, создаётся он автоматически. Иногда при разработке, чтобы изменения вступили в силу, его может потребоваться очищать.
Но и в конце хотелось бы добавить пару команд npm, которые не относятся к «artisan», но часто используются при разработке. Npm – это менеджер пакетов, который входит в состав Node.js. Node.js как правило устанавливается попутно с Laravel, и выполняет ряд задач по проекту. В основном это работа с преобразованием файлов CSS и JS.
Преобразование всех файлов JS/CSS
Согласно правилам, в файле «миксе» webpack.mix.js который находится в корне сайта, будет выполнено преобразование файлов. Таким образом, внося какие-либо изменения в CSS либо JS файлы, необходимо выполнять преобразование, перед тем как изменения можно увидеть в браузере.
Автоматическое преобразование файлов JS/CSS
В предыдущем случае, команду следует запускать после каждого изменения файлов. Запуска в этом режиме, отслеживание изменений и преобразование файлов будет происходить автоматически.
revert ‘php artisan serve’ command in laravel
I have a laravel app. I ran ‘php artisan serve’ command for local testing and my app was served at localhost:8000. But now I want to stop serving it at localhost:8000 ie., I want it not to serve now.
I closed the command line, restarted the server but it is still serving. How can it be done?
Note: I am using windows for testing purposes.
10 Answers 10
here is what i do press ctrl + c
to check if the port is busy or not if any process is listening to the port 8000 it will be displayed with port id
kill the process that listen to that port id
Reopen the command-line and start back the server.
I used Ctrl + C in my mac for stop the command php artisan laravel serve
For windows user, type this command for showing the list of current running php artisan process:
Look up PID number (XXXX), and type this to kill the process:
When I use cygwin to run my php artisan serve on Windows machine, pressing ctrl + c does not kill the process. To stop it, use @jsalonen’s solution. Basically you are looking for this then kill it:
Windows 10 with XAMPP server depending on what shell you use to run:
In Windows CMD: CTRL + C
In XAMPP Shell: CTRL + Pause/Break
In Ubuntu and RedHat/CentOS terminal it’s: CTRL + C
Ctrl + Pause|Break should do it for Windows.
If your using VS Code, simply do the following:
This deletes the shell and kills the server.
Консоль Artisan
Введение
Artisan — интерфейс командной строки, который поставляется с Laravel. Он содержит набор полезных команд, помогающих вам при разработке приложения. Для просмотра списка доступных команд используйте команду sh list :
Каждая команда имеет описание, в котором указаны её доступные аргументы и ключи. Для просмотра описания просто добавьте перед командой слово sh help :
Создание команд
Генерирование команд
Затем вам надо зарегистрировать команду, тогда она сможет быть запущена через командный интерфейс Artisan.
Структура команды
Для улучшения кода, с точки зрения его повторного использования, полезно сохранять ваши консольные команды простыми и использовать в них сервисы самого приложения для выполнения их задач. Обратите внимание, что в приведённом примере мы внедряем класс сервиса для выполнения «трудоёмкой» задачи отправки писем.
Давайте посмотрим на пример команды. Мы можем внедрить любые необходимые зависимости в конструкторе команды. Сервис-контейнер Laravel автоматически внедрит все указанные в конструкторе зависимости:
Команды замыкания
Команды на основе замыканий являются альтернативой определению консольных команд в виде классов, подобно тому, как замыкания маршрутов являются альтернативой контроллерам. В методе PHP commands () файла app/Console/Kernel.php Laravel загружает файл routes/console.php :
Замыкание привязано к лежащему в основе экземпляру команды, поэтому у вас есть полный доступ ко всем вспомогательным методам, которые обычно доступны вам в полном классе команды.
Указание типов зависимостей
Помимо получения аргументов и ключей вашей команды в замыканиях команд можно указывать типы дополнительных зависимостей, которые вам необходимо получить из сервис-контейнера:
Описание команд замыканий
При определении команд на основе замыканий вы можете использовать метод PHP describe () для добавления описания команды. Это описание будет выводится при выполнении команд sh php artisan list или sh php artisan help :
Определение ожиданий ввода
При создании консольных команд часто необходимо получать ввод от пользователя через аргументы или ключи. В Laravel очень удобно определить ожидаемый от пользователя ввод, используя свойство signature вашей команды. Это свойство позволяет задать имя, аргументы и ключи для команды в едином, выразительном, маршруто-подобном синтаксисе.
Аргументы
Все вводимые пользователем аргументы и ключи заключаются в фигурные скобки. В следующем примере команда определяет один требуемый аргумент user :
Вы можете сделать аргумент необязательным и определить значения по умолчанию для аргументов:
Ключи
Ключи со значениями
Теперь посмотрим на ключи, которые ожидают значения. Необходимость ввода значения для ключа задаётся при помощи знака равно (=):
В этом примере пользователь может передать значение для ключа вот так:
Для ключей можно задать значение по умолчанию, указав его после имени ключа. Это значение будет использовано, если пользователь не укажет значение ключа:
Сокращение ключа
Чтобы задать сокращение при определении ключа, вы можете указать его перед именем ключа и отделить его символом вертикальной черты (|):
Ввод массивов
При вызове этой команды в командную строку можно передать аргументы user по порядку. Например, следующая команда установит значение user равное [‘foo’, ‘bar’] :
При определении ключа, который будет принимать на вход массив, каждое передаваемое в команду значение ключа должно иметь префикс в виде имени ключа:
Описание ввода
Вы можете задать описание для аргументов и ключей, отделив их двоеточием. Если вам необходимо немного больше места для определения вашей команды, вы можете разделить описание на несколько строк:
Ввод/вывод команд
Чтение ввода
Для чтения значения аргумента используйте метод PHP argument () :
Если вам необходимо прочитать все аргументы в виде массива, вызовите метод PHP arguments () (для версии 5.2 и ранее — метод PHP argument () без аргументов):
Запрос ввода
В дополнение к отображению вывода вы можете запросить у пользователя данные во время выполнения команды. Метод PHP ask () выведет запрос, примет введённые данные, а затем вернёт их вашей команде:
Запрос подтверждения
Автозаполнение
Метод PHP anticipate () можно использовать для предоставления пользователю возможных вариантов для выбора. Независимо от наличия этих вариантов пользователь может указать свой вариант.
Вопросы с несколькими вариантами ответов
Вывод
Для простого вывода текста в консоль без использования специальных цветов используйте метод PHP line () :
Табличный вывод
Метод PHP table () позволяет легко форматировать несколько строк/столбцов данных. Просто передайте в него заголовки и строки. Ширина и высота будет динамически определена на основе переданных данных:
Индикаторы процесса
Для продолжительных задач бывает полезно вывести индикатор процесса. Используя объект вывода мы можем запустить, передвинуть и остановить индикатор. Сначала определите общее число шагов, по которым будет идти процесс. Затем передвигайте индикатор после выполнения каждого шага:
Указание имени среды для выполнения команды
Вывод вашей текущей версии Laravel
Регистрация команд
Программное выполнение команд
С помощью метода PHP queue () можно даже поставить команды в очередь, тогда они будут обработаны в фоне с помощью ваших обработчиков очереди. Прежде чем использовать этот метод, убедитесь в том, что вы настроили вашу очередь, и что слушатель очереди запущен:
Вызов команд из других команд
Планирование команд Artisan
Данный раздел статьи актуален только для версии 5.0 и был
удален в версии 5.1.
Раньше разработчикам приходилось создавать Cron-задачи для каждой консольной команды, которую они хотели запланировать. Это утомительно. Для планирования консольных команд теперь не ведётся контроль версий, и для добавления Cron-задач вам необходимо подключаться к серверу по SSH. Давайте упростим нам жизнь. Планировщик команд Laravel позволяет вам гибко и выразительно задавать план команд в самом Laravel, а на сервере нужна только одна Cron-задача.
Эта задача будет каждую минуту вызывать планировщик команд Laravel. А тот в свою очередь будет проверять имеющиеся в плане задачи и выполнять необходимые. Проще некуда!
Ещё примеры планирования
Давайте рассмотрим ещё несколько примеров планирования.
Планирование замыканий
Планирование терминальных команд
Ручное Cron-выражение
Частые задачи
Выполнение команды каждые пять, десять или тридцать минут соответственно:
Ежедневные задачи
Ежедневные задачи в указанное время (24-часовой формат)
Задачи, выполняемые дважды в день
Задачи по будням
Еженедельные задачи
Ежемесячные задачи
Задачи, выполняемые в указанный день недели
Защита от наложения задач
По умолчанию запланированные задачи будут запущены, даже если предыдущий экземпляр всё ещё запущен. Для предотвращения такого поведения используйте метод PHP withoutOverlapping :
В этом примере команда foo будет запускаться каждую минуту, если она уже не запущена.
Указание конкретных сред для запуска задач
Указание необходимости запуска задачи даже в режиме техобслуживания
Запуск задачи только в случае возврата PHP true
Отправка вывода задачи на e-mail
Необходимо отправить вывод в файл перед тем, как он сможет быть послан по e-mail.
Отправка вывода задачи в указанное место
Выполнить ping указанного URL после запуска задачи
Комментарии (1)
Подскажите, куда делась команда app:name? Запускаю на выполнение php artisan app:name Appname, но выдает сообщение:
«There are no commands defined in the “app” namespace.»
Laravel. Установка, настройка, создание и деплой приложения
Итак, у вас есть желание попробовать или узнать о фреймворке Laravel.
Если вы хорошо знакомы с другими PHP фреймворками — для вас это не составит особого труда, если же нет — это отличный выбор для первого фреймворка.
Статья очень большая. Рекомендую читать ее полностью во время выходных.
Установка
Установка окружения будет происходить в среде *nix (на сайте так же есть мануал по установке на Windows, плюс к этому вам нужен будет сервер, например WAMP и Git).
Предположим, что у Вас совсем чистенькая ОС. Тогда откройте терминал и введите эти строчки скопируйте и вставьте
Создадим проект laravel в папке habr
Перейдем в созданный проект и убедимся, что все работает, запустив команду php artisan serve
Локальный сервер будет доступен по адресу http://localhost:8000.
Перейдя по адресу http://localhost:8000 вы должны увидеть красивую заставку как в начале поста.
Настройка
Для соединения с базой данных (далее БД) у Laravel есть конфигурационный файл database.php, находится он в папке app/config/.
Сначала создадим БД и пользователя в MySQL
Отлично! У нас есть все данные для доступа к MySQL : пользователь habr с паролем my_password и БД habr на хосте localhost. Перейдем в файл конфигурации БД и изменим наши настройки.
В Laravel есть отличные инструменты — Миграции и Построитель Схем.
Во первых создадим таблицу миграций:
Если настройки соединения с БД правильны, то мы готовы создавать миграции и таблицы.
Но перед этим хочу вас познакомить с установкой дополнительных пакетов, которые можно использовать для более эффективного и быстрого создания веб приложения.
Laravel 4 Generators
Мега полезный инструмент — generators от Jeffrey Way. GitHub.
Он добавляет в список artisan много полезных команд, таких как:
Установка пакета
После этого нужно обновить зависимости проекта. Введите в терминале
Последним штрихом будет занесение в кофигурационный файл app/config/app.php в список провайдеров приложения строки
Создание приложения
Предположим, что мы создаем некий блог сайт со скидками. Для этого нам нужно:
Набросаем схему таблиц в БД. У меня получилось что-то такое:
За это спасибо generator‘у. Так как все, что я сделал — это прописал 10 строк, кстати, вот и они:
Я надеюсь этот пример использования генератора достаточно наглядно показал, каким образом его использовать и насколько он полезен.
Чего нам еще не хватает — так это некоторых связок между таблицами.
Важно знать! При добавлении foreign key к колонке в таблице нужно убедится, что колонка является unsigned.
Теперь нам нужно прописать добавление индексов внутри самих файлов миграций, так как такие изменения автоматически не создаются.
Взгянув на схему БД видим ситуацию по лучше
На данный момент все ссылки на ресурсы являются открытыми, и по ним можно переходить всем кому угодно.
Допустим, добавим роль admin. По ссылке http://localhost:8000/roles видим следующую картину:
Немного о шаблонах и шаблонизаторе Blade в Laravel.
Для файлов шаблонов используется раширение .blade.php. Заглянув в файл app/views/layouts/scaffold.blade.php мы видим
Первым делом подумаем о защите всех ресурсов. Для этого нам нужно ввести авторизацию.
Создадим новый контроллер LoginContoller в папке app/controllers
И добавим для него несколько шаблонов
Hash — это класс шифрования, который использует метод bcrypt, чтобы пароли в БД хранились в зашифрованом виде (Laravel Security).
Метод нашего Контроллера login() авторизирует пользователя по email или username и перенаправляет на страницу, с которой он попал под фильтр авторизации. В случае не совпадения данных, перенаправляет обратно с входящими данными, сообщением о ошибке, но без пароля.
Таким образом у нас есть Контроллер, который отвечает за авторизацию.
Следующим шагом для скрытия всех ресурсов от доступа будет изменение файла app/routes.php, который содержит маршруты приложения.
Ко всем маршрутам, заключенным в Route::group(array(‘before’ => ‘admin.auth’)) будет применятся фильтр admin.auth, который проверяет, является ли пользователь гостем, или нет, и в случае, если является — отправит его на страницу входа. Про фильтры можно почитать тут, а про группировку маршрутов тут. Другой фильтр Route::group(array(‘before’ => ‘un_auth’)) будет проверять, является ли пользователь вошедшим на сайт, и если проверка выполнятся — то он его разлогинивает.
Для нормальной работы изменим файлы логина и регистрации:
Что же, теперь можна заняться ресурсами. Начнем с городов. Первым делом изменим в Модели City правила валидации:
Для удобства перехода между ссылками добавим меню в app/views/layouts/scaffold.blade.php, а так же добавим jQuery и jQuery-UI для будующих нужд
Далее перейдем к редактированию правил валидации в Модели Offer :
Как работают селекты можно глянуть тут Forms & Html (Dropdown Lists). Таким образом мы имеем возможность выбирать из существующих городов и компаний в БД.
Чего нам еще не хватает — так это добавление тегов к скидкам. Тут нам поможет jquery-ui с autocomplete для добавления нескольких значений. Для этого расширим файл с скриптами app/views/offers/create.blade.php:
Последнее, что нам нужно сделать — это изменить логику создания скидок.
Во первых, расширим правило expires, что бы скидка заканчивалась не раньше завтрашнего дня, и не позже, чем через 1 месяц. Далее выделим все id тегов в отдельный массив, проверив их наличие в БД. После идет небольшая проверка, введены ли теги. А под самый конец очень интересный прием: в Eloquent для связки таблиц можна использовать разные отношения (Eloquent Relationships), к примеру, у Модели Offers может быть много тегов, соответсвенно пропишем это в Модели
Осталось изменить файл app/views/offers/index.blade.php
И мы видим отличную картину, которая полностью отображает структуру скидки:
Теперь осталось изменить app/views/offers/edit.blade.php, app/views/offers/show.blade.php и метод update в app/controllers/OfferController.php.
Код для app/views/edit.blade.php
Изменим метод update в OfferController :
Далее изменим файл app/views/offers/show.blade.php:
Теперь и после изменения скидки у нас будет красиво выводится ее структура с изображением и всеми реляционными данными.
Главная страница сайта
Настало время наконец то для создания главной страницы сайта.
Для начала создадим новый layout :
А так же файл стилей:
Потом переопределим маршрут главной страницы:
Добавим в HomeController недостающий метод index :
Создадим папку app/views/homeи добавим туда файл index.blade.php, а так же создадим файл _preview.blade.php в папке app/views/offers
Далее нужно добавить поиск скидок по тегам, городам и компаниям. Для этого добавим 3 маршрута в файл app/routes.php сразу же за home :
Теперь добавим недостающие методы в HomeController :
Что бы все это дело заиграло, изменим файл app/views/offers/_preview.blade.php, добавив ссылок:
Кликаем, переходим, скидки сортируются и выводятся в соответствии с критериями.
Теперь сделаем представление для просмотра отдельной скидки:
Для того, чтобы можно было просматривать скидку полностью, добавим маршрут и метод, а так же в конце я добавил форму для комментариев. Для ее работоспособности также нужно добавить маршрут и метод в нужном контроллере:
Далее идет работа с промежуточной таблицей offers для скидки и пользователя. Эту связь нужно указать в Модели Offer
Как видите, мы тут явно задаем таблицу comments как промежуточную, и указываем, что так же в этой таблице содержатся дополнительные колонки body и mark + в этой таблице используются штампы времени (создания и обновления).
Используя проверку, есть ли уже комментарий к конкретной скидке от текущего пользователя (метод contains()), перенаправляем обратно. Если же нет — то прикрепляем новый комментарий от пользователя к скидке с его оценкой и текстом.
Для вывода комментариев на странице скидки изменим немного файл app/views/offers/_show.blade.php
Теперь под скидками пользователи могут оставлять свои комментарии, каждый по одному, и если пользователь уже оставил комментарий — то форма не будет для него выводиться.
Следующим шагом будет распределить права доступа к сайту. Для начала укажем связь между пользователями и ролями:
Далее добавим в админке управление ролями пользователей:
Помним, что в Модель User нужно добавить связь с ролями:
Создадим контроллер UserController :
Создадим папку app/views/users и добавим туда 3 файла:
А так же изменим немного метд index контроллера RolesController
Теперь автодополнение работает.
Далее, для того, что бы у нас с вами не было разбежностей, откатим все миграции и воспользуемся отличным инструментом, который нам предоставляет Laravel — это DatabaseSeeder. С помощью него мы можем наполнить нашу БД какими-то конфигурационными, или стартовыми / тестовыми данными. Для этого сначала создадим класс UsersTableSeeder в папке app/database/seeds:
Логика такова: очищаем таблицу, создаем массив данных и вставляем в БД.
Проделаем то же самое с RolesTableSeeder :
Далее создадим еще один класс Seeder :
Таким образом мы добавили роль admin нашему первому пользователю.
Чтобы очистить БД и заполнить ее нашими начальными данными сначала изменим файл app/database/seeds/DatabaseSeeder.php таким образом:
И для принятия всех изменений запустим через консоль команду (находясь в папке /workspace/php/habr/):
Далее выстроим логику на права. Внесем изменения в Модель User :
Далее изменим файл маршрутов, что бы он соответствовал правам пользования сайтом:
Как вы заметили, я добавил к маршруту комментирования дополнительный фильт. Таки образом, никто, кроме обычных пользователей сайта не сможет оставлять комментарии к скидкам.
Изменим метод login() контроллера LoginController :
Теперь при входе на сайт обычные пользователи будут попадать на главную страницу, а администраторы, модераторы и менеджеры в админпанель.
Изменим немного навигационное меню для администрации:
Отлично — теперь каждой роли будут видны те ресурсы, к которым у них есть доступ.
Emails
Важным аспектом для web приложения является отправка почты.
Laravel использует SwiftMailer для создания писем (Laravel Mail).
Параметр pretend отвечает за то, нужно ли отправлять письма. Если его выставить в true, то оправка писем происходить не будет, но в логах сайта (app/storage/logs) будут сохраняться отчеты об отправке.
Первым делом я хочу, чтобы при регистрации пользователю отправлялось письмо с приветствием, для этого создам шаблон в папке app/views/emails:
Далее изменим метод store() нашего LoginController :
Функция trans() — вспомогательная функция, которая выводит локализированную строку из конфигурации. Можете заглянуть в папку app/lang/en/reminders.php и увидить какие ошибки могут выводиться. Для смены локализации на, допустим, русский язык вам понадобится изменить в файле app/config/app.php значение locale с en на ru и добавить папку app/lang/ru, в которой воссоздать файлы как в папке app/lang/en.
Далее добавим 4 маршрута:
Для перехода на восстановление так же добавим ссылку на странице логина:
А так же недостающие методы в LoginController :
Теперь любой пользователь может восстановить свой пароль.
Добавим еще ссылку для входа и регистрации на сайт на главной странице:
Для того, что бы ограничить вывод на страницах только тех скидок, которые еще не закончились нам понадобится добавить еще один метод в Модель Offer :
Пагинация
Таким образом на одной странице будут выводиться только 15 результатов, и внизу будут переходы по страницам. Количество результатов легко изменяемо — достаточно передать нужное число в метод, например paginate(1) даст 1 результат на страницу.
Ничего вроде сложного в этом нет.
Для удобства так же сделаем и в админ панели.
Последнее, что хочется добавить к сайту — так это вывод последних комментариев на страницах и закладки из скидок, к которым пользователь оставил комментарии.
Начнем с добавления комментариев в каркасе страницы:
А так же создадим сам шаблон comment :
Не забываем добавлять связь между Моделью Comment User и Offer :
А так же вспомогательная функция для сокращения и избавлением от html-тегов комментария.
Осталось добавить закладки для пользователя:
Деплой
Процес регистрации там довольно прост.
Далее создаем новое приложение.
Окружение запущено и работает.
fortrabbit замораживает не активные приложения. То, как разморозить приложение можно почитать тут.
Теперь для того, чтобы залить наше приложение на fortrabbit идем в терминал:
После всего, осталось зайти через ssh и запустить миграции. Итак:
Потом введите свой пароль и вы на сервере.
Перейдите в папку htdocs и выполните:
Если настройка БД была правильной — никаких проблем возникнуть не должно.
Для работы с Composer на хостинге можно даже не использовать ssh — достаточно в коммите добавить такой триггер:
Кстати, в своем репозитории на GitHub я добавил еще seeds и картинки для скидок.
Поиграться можно тут: Habra Offers.
Заключение
Надеюсь вам было интересно это читать, и полезно это делать. Laravel — отличный фреймворк для разработки веб приложений разной сложности.
Основные, и даже больше, аспекты я постарался объяснить. И для интереса дам домашнее задание:
Пожалуй неплохие таски, как считаете?
Об авторе
Сбор статистики
Все грамматические ошибки пишите, пожалуйста в личку.
Haters gonna die (Поспорил, что напишу это).