2016-09-09 6 views
5

सिम्फनी 3 कंसोल के साथ, मैं कैसे कह सकता हूं कि जब कोई उपयोगकर्ता एक विकल्प प्रदान करता है, लेकिन इसे बिना किसी मूल्य के प्रदान किया जाता है? विकल्प की आपूर्ति नहीं करने के विरोध में?सिमफ़ोनी कंसोल के साथ किसी मूल्य के बिना कोई विकल्प प्रदान किए जाने पर कैसे पहचानें?

उदाहरण के तौर पर, निम्न कंसोल कॉन्फ़िगरेशन लें।

<?php 

class MyCommand extends \Symfony\Component\Console\Command\Command 
{ 
    // ... 

    protected function configure() 
    { 
     $this->setName('test') 
      ->setDescription('update an existing operation.') 
      ->addOption(
       'option', 
       null, 
       InputOption::VALUE_OPTIONAL, 
       'The ID of the operation to update.' 
      ); 
    } 
} 

आदेश मदद --option[=OPTION] के रूप में विकल्प उदाहरण देकर स्पष्ट करना होगा, इसलिए मैं इस निम्न तरीकों कॉल कर सकते हैं।

bin/console test 
bin/console test --option 
bin/console test --option=foo 

हालांकि, $input->getOption() पहले दो मामलों में NULL वापस आ जाएगी। मुझे दूसरे मामले में उम्मीद थी कि यह TRUE लौटाएगा, या विकल्प को इंगित करने के लिए कुछ संकेत दिया जाएगा।

इसलिए मुझे नहीं पता कि विकल्प को किस प्रकार आपूर्ति नहीं किया जा रहा है, अंतर की पहचान कैसे करें, और इसे आपूर्ति की जा रही है लेकिन बिना किसी मूल्य के।

यदि अंतर बताने का कोई तरीका नहीं है, तो InputOption::VALUE_OPTIONAL के लिए उपयोग-केस क्या है?

उत्तर

1

Symfony\Component\Console\Input\InputInterface में चारों ओर poking के बाद, मैं getParameterOption() तरीका है जिसके इस्तेमाल किया एक विकल्प नहीं है, एक मूल्य के बिना इस्तेमाल के लिए एक विकल्प है, और एक मूल्य के साथ प्रयोग किया एक विकल्प के बीच अंतर करने की क्षमता प्रदान करता की खोज की।

आदेश के configure() विधि में:

$this->addOption('test', null, InputOption::VALUE_OPTIONAL);

आदेश के execute() विधि में:

$test = $input->getOption('test'); $rawTest = $input->getParameterOption('--test');

दिया कमांड लाइन के लिए निम्न मान का उत्पादन:

> bin/console some:cmd

$test =>null

$rawTest =>false

> bin/console some:cmd --test

$test =>null

$rawTest =>null

> bin/console some:cmd --test=something

$test =>"something"

$rawTest =>"something"

3

आप दो चीजों को एक साथ जोड़ रहे हैं। कोई मूल्य InputOption::VALUE_NONE और वैकल्पिक मान InputOption::VALUE_OPTIONAL के साथ विकल्प वाला विकल्प।

प्रलेखन कहते हैं: http://symfony.com/doc/current/console/input.html

आप एक विकल्प है कि वैकल्पिक रूप से एक मान स्वीकार के साथ एक कमांड बनाने के लिए मना कुछ भी नहीं है। हालांकि, जब कोई विकल्प मूल्य (कमांड - भाषा) के बिना उपयोग किया गया था या जब यह बिल्कुल (कमांड) पर उपयोग नहीं किया गया था तो आप अलग-अलग तरीके से अंतर कर सकते हैं। दोनों मामलों में, विकल्प के लिए पुनर्प्राप्त मूल्य शून्य हो जाएगा।

यह वास्तव में आपके मामले का वर्णन करता है।

जब आप पैरामीटर पारित नहीं किया गया था या पास नहीं किया गया था, लेकिन कोई मूल्य के साथ आप अंतर नहीं कर सकते हैं। यही InputOption::VALUE_NONE के लिए बनाया गया था।

अपने उपयोगकेस के आधार पर आप पैरामीटर के लिए एक डिफ़ॉल्ट मान प्रदान कर सकते हैं जिसका उपयोग console test और console test --option मामलों में किया जाएगा।

यह भी ध्यान दें कि addOption दूसरे तर्क के रूप में एक शॉर्टकट तर्क के रूप में लेता है।

public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) 
+1

की पुष्टि के लिए धन्यवाद। यह अभी भी सवाल उठाता है (आप पर नहीं, बल्कि सामान्य रूप से,) यह सुविधा क्यों मौजूद है? अर्थात। विकल्प के विकल्प को वैकल्पिक मान रखने की क्षमता क्यों प्रदान करें यदि आदेश केवल मूल्य की पहचान कर सकता है जब उसके पास मूल्य होता है। किसी ने इसे अच्छे उपयोग के लिए कैसे रखा? – user2045006

संबंधित मुद्दे

 संबंधित मुद्दे