Ремесленник Laravel с параметром сообщения с пробелами дает слишком много аргументов, ожидаемые аргументы "команда" - PullRequest
0 голосов
/ 07 ноября 2018

Я управляю ремесленником:

php artisan down --message "Going down for maintenance" --retry=60

[ОБНОВЛЕНИЕ] ИЛИ запустите его так, как предложил @Remul:

php artisan down --message="Going down for maintenance" --retry=60

тогда оба выдают мне ошибку:

[Symfony\Component\Console\Exception\RuntimeException]
 Too many arguments, expected arguments "command".

Если запустить команду без пробелов, как это:

php artisan down --message "Going_down_for_maintenance" --retry=60

Ошибка не возникает

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Я использую php 7.0.14

Я разобрался:

Проблема в том, как php получает аргументы из командной строки В vendor / symfony / console / Input / ArgvInput.php я мог понять, что php получает аргументы наподобие этого:

0 => "artisan"
  1 => "down"
  2 => "--message=Going"
  3 => "down"
  4 => "for"
  5 => "maintenance"
  6 => "--retry=60"

Так что даже для того, чтобы убедиться, что я сделал собственный скрипт с этим содержанием:

<?php

var_dump($argv);

И я запускаю это:

php -v;php test_argv.php "parm with space" other_parameter

Вывод был:

PHP 7.0.14 (cli) (built: Jan 30 2017 15:45:33) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
array(5) {
  [0]=>
  string(13) "test_argv.php"
  [1]=>
  string(4) "parm"
  [2]=>
  string(4) "with"
  [3]=>
  string(5) "space"
  [4]=>
  string(15) "other_parameter"
}

Я запускаю его на другой машине с другой версией PHP и смотрю на мои результаты:

PHP 7.1.5 (cli) (built: Sep 19 2017 10:48:01) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Xdebug v2.5.4, Copyright (c) 2002-2017, by Derick Rethans
array(3) {
  [0] =>
  string(13) "test_argv.php"
  [1] =>
  string(15) "parm with space"
  [2] =>
  string(15) "other_parameter"
}

Похоже, что в php 7.0 и 7.1 синтаксический анализ argv совсем другой, один игнорирует двойные кавычки как разделитель строк, а последний не

0 голосов
/ 08 февраля 2019

Это не связанная проблема, но это было то место, куда Google отправил меня, когда я сделал эту ошибку ... soo ..

Другая распространенная причина получить:

Too many arguments, expected arguments "command".

Это то, что вы предоставляете аргумент, когда сценарий ремесленника ожидает выбора. Так что нужно поменять

./artisan yourcommand:yoursubcommand some_kind_of_input

до

./artisan yourcommand:yoursubcommand --an_option=some_kind_of_input

Ошибка, как правило, означает, что ремесленник не ожидал какого-либо дополнительного аргумента для этой команды ...

0 голосов
/ 07 ноября 2018

Это сообщение доступно в формате файла JSON с именем storage / framework / down, сгенерированного командой php artisan down.

Вы можете открыть этот файл и изменить его.

Гудлак

...