如何制作自定义服务命令?

How to make custom serve command?

我在过去的项目中确实这样做了并且它正在运行,但它现在是一个新版本 6.0,它是 5.8 我以前用过。

所以我尝试了什么,我只是创建了一个命令:

php artisan make:command CustomServeCommand

然后我将这些代码放入 CustomServeCommand class:

protected function getOptions()
{
    return [
        ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', '127.0.1.1'],//default 127.0.0.1
        ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 80],
    ];
}

当我 php artisan serve 它不工作。

实际上,上面的代码在 5.8 版本中运行,返回这些行:

Laravel development server started: <http://127.0.1.1:80>


我现在的问题是如何在 6.0 版中制作自定义服务命令:

而不是 127.0.0.1:8000,我想提供 127.0.1.1:80

有人知道如何实现吗?


已编辑

Note: this is just to lessen the post, I don't intend to post codes in image.

这里是 5.8

这是在6.0

中生成的代码

为什么不将其作为参数传递?

对于端口 8000:

php artisan serve --port=8080

如果您想 运行 它在端口 80 上,您可能需要将它与 sudo 一起使用:

sudo php artisan serve --port=80

因为在 5.8 版本中,您 EXTENDING composer 加载的现有命令 before 您自己 6.0 你不是

像这样扩展现有的 serve 命令

这就是您需要的所有内容(删除其余生成的代码)

在 6.0.0 中测试

<?php

namespace App\Console\Commands;

use Illuminate\Foundation\Console\ServeCommand;
use Symfony\Component\Console\Input\InputOption;

class CustomServeCommand extends ServeCommand
{
    protected function getOptions()
    {
        return [
            ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', '127.0.1.1'], //default 127.0.0.1
            ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 80],
        ];
    }
}

并且NOTConsole\Kernel

中注册命令

您的端口选择有点奇怪,因此您必须做几件事

停止已经在使用该端口的服务(假设Linux)

sudo service nginx stop 
# or
sudo service apache2 stop 

以root权限执行命令

sudo php artisan serve

结果

~/Sites/laravel (master ✗) ✹ ★ ᐅ  sudo php artisan serve
Laravel development server started: <http://127.0.1.1:80>
[Thu Sep 26 18:04:02 2019] Failed to listen on 127.0.1.1:80 (reason: Address already in use)
~/Sites/laravel (master ✗) ✹ ★ ᐅ  sudo service nginx stop
~/Sites/laravel (master ✗) ✹ ★ ᐅ  sudo php artisan serve 
Laravel development server started: <http://127.0.1.1:80>
^C
~/Sites/laravel (master ✗) ✹ ★ ᐅ  php artisan serve
Laravel development server started: <http://127.0.1.1:80>
[Thu Sep 26 18:04:23 2019] Failed to listen on 127.0.1.1:80 (reason: Permission denied)
~/Sites/laravel (master ✗) ✹ ★ ᐅ  sudo php artisan serve
Laravel development server started: <http://127.0.1.1:80>
[Thu Sep 26 18:10:28 2019] 127.0.0.1:58714 [200]: /robots.txt
[Thu Sep 26 18:10:29 2019] 127.0.0.1:58716 [200]: /favicon.ico

PS: 我个人建议不要这样做,端口 80 是标准的 HTTP 端口,不应被内置服务器使用

请注意,尽管 http://127.0.1.1 访问

,服务器会将请求代理到不同的本地 IP 和端口

此外,我建议给 Laravel Valet 一个机会(适用于 Mac 和 Linux),因为它更容易访问 project.test 无需任何命令

尽管如此,我希望这对您有所帮助