コマンドラインにおけるオプションの設定・取得。|の後がエイリアス名、=の後の文字列で型を指定できる。
try { $options = new Zend_Console_Getopt( array( 'help|h' => 'help.', 'zfm|m=s' => 'module', 'zfc|c=s' => 'controller', 'zfa|a=s' => 'action' ) ); $options->parse(); } catch(Zend_Console_Getopt_Exception $e){ die($e->getMessage() . ' : ' . $e->getUsageMessage()); }
Zend_Controller_Request_Simpleがポイント。アクション、コントローラ、モジュールを引数に指定してリクエストオブジェクトを取得する。
if(isset($options->zfa) && isset($options->zfc) && isset($options->zfm)){ $request = new Zend_Controller_Request_Simple( $options->zfa, $options->zfc, $options->zfm ); $front = Zend_Controller_Front::getInstance(); $front->setRequest($request); $front->setRouter(new Custom_Controller_Router_Cli()); $front->setResponse(new Zend_Controller_Response_Cli()); $front->throwExceptions(true); $front->addModuleDirectory(dirname(__FILE__) . '/application/modules'); $front->dispatch(); }
Custom_Controller_Router_Cliはこんな感じ。
<?php require_once 'Zend/Controller/Router/Interface.php'; require_once 'Zend/Controller/Router/Abstract.php'; class Custom_Controller_Router_Cli extends Zend_Controller_Router_Abstract implements Zend_Controller_Router_Interface { public function assemble($userParams, $name = null, $reset = false, $encode = true) {} public function route(Zend_Controller_Request_Abstract $dispatcher) {} }
基本的には以上で実行できるが
■アクセスコントロールの設定
アクセスコントロールを行っている場合は上述のコードよりも先にアクセスできるようにしなければならない。以下は一例。
$sesion = new Zend_Session_Namespace('global'); $sesion->userLevel = 'admin'; $acl = new Zend_Acl(); $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('admin'), 'guest'); $acl->add(new Zend_Acl_Resource('guestPage')); $acl->add(new Zend_Acl_Resource('adminPage')); $acl->allow('guest'); $acl->allow('admin'); $acl->deny('guest', 'adminPage'); $acl->allow('admin', 'adminPage'); Zend_Registry::set('acl', $acl);
基本的には一般ユーザが閲覧(実行)できる場所に、このファイルを配置するのは良くない。