Free Essay

Php Zend 2 Console

In:

Submitted By MariaDell4
Words 1882
Pages 8
Платформата ZEND 2 во себе вклучува и вградена поддршка на конзола.
Кога е извршен Zend\Application од конзолен прозорец( најчесто shell window или Windows command prompt), потоа ќе ги подготви Zend\Mvc компонентите за да се справат со барањето.
Конзолната поддршка е овозможена при самото започнување на користењето на ZEND платформата, но за да функционира соодветно мора да има барем една конзолна рута и еден акционен контролер за да се справи со барањето.
- Console routing овозможува да се повикаат контролерите на командната линија чиишто информации ќе бидат внесени од страна на корисникот.
- Module Manager integration – овозможува на ЗФ2 апликациите и модулите да се прикажат кориснички и помошни информации, во случај да командната линија не биде препознаена ( нема пронајдено рута).
- Console-aware action controllers ќе прими барање од конзола кое ги содржи параметри и знаменца. Тие можат да пратат излез повторно до конзолниот прозорец.
- Console adapters овозможуваат ниво на апстракција за интеракција со конзолата на различни оперативни системи
- Console prompts може да се користи за интеракција со корисникот со поставување на прашања и добивање на одговор.

Пишување на конзолни рути
Конзолна рута дефинира оптимални командни параметри. Кога рутата ќе се пронајде, се однесува аналогична кон стандардот, http рута покажува кон МВЦ контролер и акција.
Сакаме да извршиме следната команда: > zf user resetpassword user@mail.com

Кога корисникот ќе повика во апликацијата (zf) со наведените параметри, ние всушност повикуваме акцијата resetpassword од Application\Controller\IndexController.
Прво треба да креираме дефиниција за рутата: user resetpassword
Оваа рута прима точно 3 аргументи, а тоа се корисникот, акцијата која треба да се извши и параметар за кој се извршува. user resetpassword [--verbose|-v]
Слично како предходно, но овој пат се користи и опционално знаменце –verbose или скратено -v.
Редот на знаменцата во Zend\Console се игнорира.
Ја креираме конзолната рута

array(
'console' => array(
'router' => array(
'routes' => array(
'user-reset-password' => array(
'options' => array(
'route' => 'user resetpassword [--verbose|-v] ',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'resetpassword'
)
)
)
)
)
)
)
Справување со конзолни барања
Кога корисник ќе впише команда во конзола, заедно со соодветни аргументи, контролерот ќе инстанцира метода што врши акција, многу слично како кај http барањата. class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function resetpasswordAction()
{
$request = $this->getRequest(); if (!$request instanceof ConsoleRequest){ throw new \RuntimeException('You can only use this action from a console!');
}
// Get user email from console and check if the user used --verbose or -v flag
$userEmail = $request->getParam('userEmail');
$verbose = $request->getParam('verbose') || $request->getParam('v');
$newPassword = Rand::getString(16); if (!$verbose) { return "Done! $userEmail has received an email with his new password.\n";
}else{
return "Done! New password for user $userEmail is '$newPassword'. It has also been emailed to him. \n";
} }}

Додавање информации за користење на конзола
Често се употребува во пракса за конзолните апликации да се прикажуваат информации кога ќе се стартуваат за прв пат. За ова исто така е задолжено Zend\Console заедно со MVC.
За да се прикажат кориснички информации го модифицираме Application\Module class Module implements
ConsoleUsageProviderInterface
{ public function getConsoleUsage(Console $console)
{
return array(
'user resetpassword [--verbose|-v] EMAIL' => 'Reset password for a user', array( 'EMAIL',
'Email of the user for a password reset' ), array( '--verbose|-v', '(optional) turn on verbose mode'
),
);
}
}
Секој модул што ќе го имплементира ConsoleUsageProviderInterface ќе биде прикажан како конзолни кориснички информации.
Забелешка: Како ќе бидат распоредени информациите, зависи од тоа по кој редослед се распоредени модулите.

Конзолни рути и рутирање
Zend Framework 2 сам по себе содржи интеграција со конзола, а тоа значи дека аргументите на командните линии се читаат и се користат за да се одбере соодветниот акциски контролер и акциска метода со која ќе се справи барањето. Акциите можат да извршуваат бројни задаци со цел да се врати резултат кој при тоа ќе се прикаже на корисникот во неговиот конзолен прозорец.
Има неколку рути кои можеме да ги користиме со Console, а сите се наведени во класите
Zend\Mvc\Router\Console\*

Забелешка: Рутите се користат за да се справуваат со вистинските команди, но тие не се користат за да создадат помошни пораки. Кога зенд апликациите се извршуваат во конзола за прв пат без аргументи може да се прикаже кориснички информации кои се овозможени од страна на модулите.
Основни рути:
Ова се стандардните типови на конзолни рути:





Literal parameters (пример create object (external|internal))
Literal flags (пример --verbose --direct [-d] [-a])
Positional value parameters (пример create [])
Value flags (пример--name=NAME [--method=METHOD])

Literal parameters:

Како пример, ќе наведам неколку рути преку кои ќе може да се прикажат на командна линија исто така како што се наведени и во рутата во кодот.
'show-users' => array(
'options' => array(
'route' => 'show [all|deleted|locked|admin] users',
'defaults' => array(
'controller' => 'Application\Controller\Users',
'action' => 'show'
)
)
)
За да можеме да ги прикажеме корисниците во конзолна команда ќе запишеме

> zf show users
> zf show locked users
> zf show admin users
Итн.
Literal flags
'check-users' => array(
'options' => array(
'route' => 'check users [--verbose|-v] [--fast|-f] [--thorough|-t]',
'defaults' => array(
'controller' => 'Application\Controller\Users',
'action' => 'check'
)
)
)
За да можеме да ги прикажеме корисниците во конзолна команда ќе запишеме
> zf check users -f
> zf check users -v --thorough
> zf check users -t -f -v
Positional value parameters:
'create-user' => array(
'options' => array(
'route' => 'create user ',
'defaults' => array(
'controller' => 'Application\Controller\Users',
'action' => 'create'
)
))
За да можеме да ги прикажеме корисниците во конзолна команда ќе запишеме
> zf create user Jean Doo jean@mail.com Programmer

Value flags:
'rename-user' => array(
'options' => array(
'route' => 'rename user --id= [--firstName=] [--lastName=]',
'defaults' => array(
'controller' => 'Application\Controller\Users',
'action' => 'rename'
)
)
)
-id параметарот е задолжителен за оваа рута. За да можеме да ги прикажеме корисниците во конзолна команда ќе запишеме:
> zf rename user --id 1
> zf rename user --id 1 --firstName Jean
> zf rename user --id=1 --lastName=Doo

Console-aware modules
Оваа интеграција исто така функционира и со модули вчитани со Module Manager. ZF2 оди заедно со RouteNotFoundStrategy со која се прикажуваат кориснички информации во внатрешноста на конзола, во случај да корисникот не навел аргументи, но исто така и ако аргументите не биле разбрани. Моментално поддржува два вида на информации: Application baners и Usage information.

Application banner

Кога прв пат ќе се стартува апикацијата во конзола, нема да бидат прикажани кориснички информации. Ќе ни се прикаже верзијата на Zend Framework која ја користиме.
Нашиот апликациски модул(и секој друг модул) може да овозможи апликациски банер. За да се прикаже, нашата модул класа мора да го имплементира следниот интерфејс:
Zend\ModuleManager\Feature\ConsoleBannerProviderInterface.
class Module implements ConsoleBannerProviderInterface
{
/**
* This method is defined in ConsoleBannerProviderInterface
*/
public function getConsoleBanner(Console $console){ return "==------------------------------------------------------==\n" .
"
Welcome to my ZF2 Console-enabled app
\n" .

"==------------------------------------------------------==\n" .
"Version 0.0.1\n"
;
}
}
Па во конзолата ќе се испише она што го враќаме со методот, односно:

Конзолните банери можат да бидат овозможени од еден или повеќе модули. Тие ќе бидат распоредени, по тој редослед како што се распоредени во кодот.
Да создадеме уште еден модул, со кој ќе создадеме уште еден банер. За да создадеме уште еден модул за кориснил, во патеката // config/application.config.php во модули го впишуваме и User модулот.
За да можеме да примажеме информации во конзола за корисникот, во патеката // modules/User/Module.php го имаме следниот код: class Module implements ConsoleBannerProviderInterface
{
/**
* This method is defined in ConsoleBannerProviderInterface
*/
public function getConsoleBanner(Console $console){ return "User Module BETA1";
}
}
На излез го добиваме следното:

Usage information (Кориснички информации)
Со цел да се прикажат информациите, нашата модулска класа мора да го имплементира следниот интерфејс: Zend\ModuleManager\Feature\ConsoleUsageProviderInterface.

public function getConsoleUsage(Console $console){ return array(
'show stats'
=> 'Show application statistics',
'run cron'
=> 'Run automated jobs',
'(enable|disable) debug' => 'Enable or disable debug mode for the application.'
);
}

Откако ќе се изврши во конзола го имаме следниот излез:

Исто како и претходниот application banner повеќе модули можат да овозможат кориснички информации, кои потоа ќе бидат прикажани заедно. Редоследот е исто така како и претходниот, се прикажуваат по тоа кој прв е напишан во кодот.

Free-form text
За да може да се прикаже како корисничка информација, користиме метод getConsoleUsage(Console
$console) за да се врати string или array, пример: public function getConsoleUsage(Console $console){ return 'User module expects exactly one argument - user name. It will display information for this user.';
}
Ни се прикажува на излез:

Листа на команди
Ако методот враќа асоцијативно поле, автоматски ќе се подреди во 2 колони. Првата колона ќе биде име на скрипта (влезна точка на аплицикацијата). Ова е корисно за да се прикажат разни начини за стартување на апликацијата. Пример: public function getConsoleUsage(Console $console){ return array(
'delete user '
=> 'Delete user with email ',
'disable user '
=> 'Disable user with email ',
'list [all|disabled] users' => 'Show a list of users',
'find user [--email=] [--name=]' => 'Attempt to find a user by email or name',
);
}
Во конзолата како излез ни се прикажува:

Листа од параметри и знаменца
Враќање на низа од низи од методот getConsoleUsage(Console $console) ќе произведе листа од параметри. Ова е корисно за објаснување знаменца, возможни вредности и останати информации.
Излезот ќе биде распореден во неколку колони со цел да се зголеми читливоста.
Во прилог следи пример:

public function getConsoleUsage(Console $console){ return array( array( '' , 'email of the user' ), array( '--verbose' , 'Turn on verbose mode' ), array( '--quick'
, 'Perform a "quick" operation' ), array( '-v'
, 'Same as --verbose' ), array( '-w'
, 'Wide output')
);
}
Излезот од конзола е следен:

Најдобра пракса:
1) Методот getConsoleBanner треба да врати една линија низа која ќе се состои од името на модулот и верзијата, ако тоа е овозможено.
2) Методот getConsoleUsage не треба да врати име на модул, тоа е овозможено автоматски од страна на конзолата.

Конзолни адаптери
Zend Framework 2 овозможува апстрактно конзолно ниво. Се справува со прикажување на текст во боја, враќање на големина на прозорец, а исто така овозможува и основно ниво на цртачки способности.
Ако се користат MVC контролери може да се користи конзолниот адаптер со инстанцирање на Service
Manager, но исто така може да се користи и без овој пристап.
Користење на конзолен адапер
-Големина на прозорец и наслов:
$console->getWidth() (int) преземање на широчината на прозорецот.
$console->getHeight() (int) преземање на висината на прозорецот.
$console->getSize() (array) преземање низа ( ширина, висина) на прозорецот.
$console->getTitle() (string) преземање на насловот на прозорецот.

-Поставување на карактери:
$console->isUtf8() (boolean) дали може да се прикажуваат uni-code стрингови ?
$console->getCharset()
-Читање од конзола:
$console->readChar( string $mask = null ) (string) чита еден карактер од конзола
$console->readLine( int $maxLength = 2048 ) чита единствена линија на влез од конзола.
-Разно:
$console->hideCursor() го отстранува курсорот што трепка од конзолата.
$console->showCursor() го прикажува курсорот што трепка од конзолата.
$console->clear() отстранува се што има во конзолата.
$console->clearLine() отстранува се што има во линијата на која моментално е курсорот.

Console prompts
Овој апстрактен конзолен слој исто така вклучува и неколку класи погодни за интеракција со корисникот во конзолната околина. За да можеме да ги користиме овие класи ја вклучуваме use
Zend\Console\Prompt; командата. Пример: use Zend\Console\Prompt;
$confirm = new Prompt\Confirm('Are you sure you want to continue?');
$result = $confirm->show(); if ($result) { ....}
Исто така постои и пократко начин, а тоа е со користење на методот prompt().
Неколку видови на console prompts:
-Confirm (се користи за да/не вид на одговор) - $text, $yesChar, $noChar
-Line (бара линија на влезен текст) – $text, $allowEmpty, $masLength
-Char (чита еден карактер и најчесто го валидира од листа на дозволени карактери) – $text,
$allowedChars, $ignoreCase, $allowEmpty, $echo
-Select (прикажува одреден број на опции, при што треба да се одбере една од страна на корисникот) - $text, $options, $allowEmpty, $echo

Similar Documents

Free Essay

Linux

...prototype has been designed, developed and tested. An evaluation of the overall success of the project has been conducted and recommendations for future work are also given. Words II. Table of Contents 1) Introduction.................................................................................................................................4 1.1 Overview........................................................................................................4 1.2 Sponsor Background...........................................................................................................5 1.3 Research Topics...............................................................................................5 2) Research Topic 1 – Security benefits of Linux OS compared to...

Words: 17681 - Pages: 71

Free Essay

A Hands on Intro to Hacking

...Mertsaloff/Shutterstock Interior Design: Octopod Studios Developmental Editor: William Pollock Technical Reviewer: Jason Oliver Copyeditor: Pamela Hunt Compositor: Susan Glinert Stevens Proofreader: James Fraleigh Indexer: Nancy Guenther For information on distribution, translations, or bulk sales, please contact No Starch Press, Inc. directly: No Starch Press, Inc. 245 8th Street, San Francisco, CA 94103 phone: 415.863.9900; fax: 415.863.9950; info@nostarch.com; www.nostarch.com Library of Congress Cataloging-in-Publication Data Weidman, Georgia. Penetration testing : a hands-on introduction to hacking / Georgia Weidman. pages cm Includes index. ISBN 978-1-59327-564-8 (paperback) -- ISBN 1-59327-564-1 (paperback) 1. Penetration testing (Computer security) 2. Kali Linux. 3. Computer hackers. QA76.9.A25W4258 2014 005.8'092--dc23 2014001066 I. Title. No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other product and company names mentioned herein may be the trademarks of their respective owners. Rather than use a trademark symbol with every occurrence of a trademarked name, we are using the names only in an editorial fashion and to the benefit of the trademark owner, with no...

Words: 117203 - Pages: 469