1

私は2つのモジュール(デフォルトとモバイル)を持っていますが、モバイルモジュールはjqueryモバイルのデフォルトポータルを書き直したものですが、コントローラーとアクションははるかに少ないです! コントローラーとアクションがモジュール mobile に存在するかどうかを確認するコントローラー プラグインを作成することを考えました。そうでない場合は、モジュール mobile をデフォルトに上書きします。私はこれを試します:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    if ($request->getModuleName() == 'mobile') {      
        if (!$dispatcher->isDispatchable($request)) {
            // Controller or action not exists
            $request->setModuleName('default');
        }
    }
    return $request;
}

しかし、アクションが存在しなくても$dispatcher->isDispatchable($request)常に戻ります! true:S と私は「アクションfooが存在せず、__call() にトラップされませんでした」を受け取ります

どのようにできるのか?ありがとう

4

2 に答える 2

0

app の任意の側からコントローラー/アクションが zend FM に存在するかどうかを確認する方法を疑問に思ったことはありませんか? ここにコードがあります

    $front = Zend_Controller_Front::getInstance();
    $dispatcher = $front->getDispatcher();

    $test = new Zend_Controller_Request_Http();
    $test->setParams(array(
        'action' => 'index',
        'controller' => 'content',

            )
    );

    if($dispatcher->isDispatchable($test)) {
        echo "yes-its a controller";
        //$this->_forward('about-us', 'content'); // Do whatever you want
    } else {
        echo "NO- its not a Controller";
    }

編集

こんな感じでチェック

$classMethods = get_class_methods($className);
 if(!in_array("__call", $classMethods) &&
 !in_array($this->getActionMethod($request), $classMethods))
 return false;

詳細リンクもご覧ください

于 2013-08-01T08:40:23.537 に答える