如何制作自定义服务命令?
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],
];
}
}
并且NOT在Console\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
无需任何命令
尽管如此,我希望这对您有所帮助
我在过去的项目中确实这样做了并且它正在运行,但它现在是一个新版本 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],
];
}
}
并且NOT在Console\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
无需任何命令
尽管如此,我希望这对您有所帮助