运行 artisan 命令在 laravel 5
Run artisan command in laravel 5
我有这样的控制器
public function store(Request $request)
{
Artisan::call("php artisan infyom:scaffold {$request['name']} --fieldsFile=public/Product.json");
}
显示错误
There are no commands defined in the "php artisan infyom" namespace.
当我 运行 在 CMD 中使用此命令时它可以正常工作
您需要删除 php artisan
部分并将参数放入数组中以使其工作:
public function store(Request $request)
{
Artisan::call("infyom:scaffold", ['name' => $request['name'], '--fieldsFile' => 'public/Product.json']);
}
https://laravel.com/docs/5.2/artisan#calling-commands-via-code
如果你有简单的工作要做,你可以从路由文件中完成。例如你想清除缓存。在终端中它将是 php artisan cache:clear 在路由文件中将是:
Route::get('clear_cache', function () {
\Artisan::call('cache:clear');
dd("Cache is cleared");
});
从浏览器到 运行 这个命令只需转到您的项目路径和 clear_cache。示例:
http://project_route/clear_cache
指挥工作,
路径:{项目路径}/app/Console/Commands/RangeDatePaymentsConsoleCommand.php
这是使用 artisan 命令运行的作业。
class RangeDatePaymentsConsoleCommand extends Command {
protected $signature = 'batch:abc {startDate} {endDate}';
...
}
web.php,
路径:{项目路径}/routes/web.php
web.php 管理所有请求并路由到相关控制器,并且可以为多个控制器和同一控制器内的多个功能设置多个路由。
$router->group(['prefix' => 'command'], function () use ($router) {
Route::get('abc/start/{startDate}/end/{endDate}', 'CommandController@abc');
});
CommandController.php,
路径:{项目路径}/app/Http/Controllers/CommandController.php
此控制器是为处理 artisan 命令而创建的,名称可以不同,但应与 web.php 控制器名称和函数名称相同。
class CommandController extends Controller {
public function abc(string $startDate, string $endDate) {
$startDate = urldecode($startDate);
$endDate = urldecode($endDate);
$exitCode = Artisan::call('batch:abc',
[
'startDate' => $startDate,
'endDate' => $endDate
]
);
return 'Command Completed Successfully. ';
}
要求:http://127.0.0.1:8000/command/abc/start/2020-01-01 00:00:00/end/2020-06-30 23:59:59
服务器启动后可以通过浏览器或Postman访问。 运行 此命令在 {project-path}
启动 php 服务器
php -S 127.0.0.1:8080 public/index.php
除了在另一个命令中,我不太确定我能想到这样做的充分理由。但是如果你真的想从控制器(或模型等)调用 Laravel 命令,那么你可以使用 Artisan::call()
Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]);
一个有趣的功能是 Artisan::queue()
,直到我用谷歌搜索它以获得正确的语法,我才知道它会在后台(由您的队列工作人员)处理命令:
Route::get('/foo', function () {
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
});
如果您从另一个命令中调用一个命令,则不必使用 Artisan::call
方法 - 您可以这样做:
public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
}
删除 php artisan 部分并尝试:
Route::get('/run', function () {
Artisan::call("migrate");
});
我有这样的控制器
public function store(Request $request)
{
Artisan::call("php artisan infyom:scaffold {$request['name']} --fieldsFile=public/Product.json");
}
显示错误
There are no commands defined in the "php artisan infyom" namespace.
当我 运行 在 CMD 中使用此命令时它可以正常工作
您需要删除 php artisan
部分并将参数放入数组中以使其工作:
public function store(Request $request)
{
Artisan::call("infyom:scaffold", ['name' => $request['name'], '--fieldsFile' => 'public/Product.json']);
}
https://laravel.com/docs/5.2/artisan#calling-commands-via-code
如果你有简单的工作要做,你可以从路由文件中完成。例如你想清除缓存。在终端中它将是 php artisan cache:clear 在路由文件中将是:
Route::get('clear_cache', function () {
\Artisan::call('cache:clear');
dd("Cache is cleared");
});
从浏览器到 运行 这个命令只需转到您的项目路径和 clear_cache。示例:
http://project_route/clear_cache
指挥工作,
路径:{项目路径}/app/Console/Commands/RangeDatePaymentsConsoleCommand.php
这是使用 artisan 命令运行的作业。
class RangeDatePaymentsConsoleCommand extends Command {
protected $signature = 'batch:abc {startDate} {endDate}';
...
}
web.php,
路径:{项目路径}/routes/web.php
web.php 管理所有请求并路由到相关控制器,并且可以为多个控制器和同一控制器内的多个功能设置多个路由。
$router->group(['prefix' => 'command'], function () use ($router) {
Route::get('abc/start/{startDate}/end/{endDate}', 'CommandController@abc');
});
CommandController.php,
路径:{项目路径}/app/Http/Controllers/CommandController.php
此控制器是为处理 artisan 命令而创建的,名称可以不同,但应与 web.php 控制器名称和函数名称相同。
class CommandController extends Controller {
public function abc(string $startDate, string $endDate) {
$startDate = urldecode($startDate);
$endDate = urldecode($endDate);
$exitCode = Artisan::call('batch:abc',
[
'startDate' => $startDate,
'endDate' => $endDate
]
);
return 'Command Completed Successfully. ';
}
要求:http://127.0.0.1:8000/command/abc/start/2020-01-01 00:00:00/end/2020-06-30 23:59:59
服务器启动后可以通过浏览器或Postman访问。 运行 此命令在 {project-path}
启动 php 服务器php -S 127.0.0.1:8080 public/index.php
除了在另一个命令中,我不太确定我能想到这样做的充分理由。但是如果你真的想从控制器(或模型等)调用 Laravel 命令,那么你可以使用 Artisan::call()
Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]);
一个有趣的功能是 Artisan::queue()
,直到我用谷歌搜索它以获得正确的语法,我才知道它会在后台(由您的队列工作人员)处理命令:
Route::get('/foo', function () {
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
});
如果您从另一个命令中调用一个命令,则不必使用 Artisan::call
方法 - 您可以这样做:
public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]);
//
}
删除 php artisan 部分并尝试:
Route::get('/run', function () {
Artisan::call("migrate");
});