5

zf1 では、以下を使用してコントローラーとアクション名を取得できます

$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();

zf2でこれをどのように達成できますか?

更新:私はそれらを使用して取得しようとしました

echo $this->getEvent()->getRouteMatch()->getParam('action', 'NA');
echo $this->getEvent()->getRouteMatch()->getParam('controller', 'NA');

しかし、私はエラーが発生しています

Fatal error: Call to a member function getParam() on a non-object

__construct() メソッドでそれらを取得するのが好きです。

理想的には、noaction() メソッドを実行する Action が定義されていないかどうかを確認したいと思います。PHP メソッド method_exists を使用して確認します。

4

4 に答える 4

13

さらに簡単:

$controllerName =$this->params('controller');
$actionName = $this->params('action');
于 2012-08-29T15:27:18.640 に答える
4

これらの変数にはコントローラー__construct()メソッドではアクセスできませんが、dispatchメソッドとonDispatchメソッドではアクセスできます。

ただし、アクションが存在するかどうかを確認したい場合は、zf2 には、以下のように notFoundAction の組み込み関数が既にあります。

 public function notFoundAction()
{
    parent::notFoundAction();
    $response = $this->getResponse();
    $response->setStatusCode(200);
    $response->setContent("Action not found");
    return $response;   
} 

それでも手動でやりたい場合は、次のようにディスパッチメソッドを使用してこれを行うことができます

namespace Mynamespace\Controller;

use Zend\Mvc\Controller\AbstractActionController;

use Zend\Stdlib\RequestInterface as Request;
use Zend\Stdlib\ResponseInterface as Response;
use Zend\Mvc\MvcEvent;

class IndexController extends AbstractActionController 
{

    public function __construct()
    {


    }        

      public function notFoundAction()
    {
        parent::notFoundAction();
        $response = $this->getResponse();
        $response->setStatusCode(200);
        $response->setContent("Action not found");
        return $response;   
    }

    public function dispatch(Request $request, Response $response = null)
    {
        /*
         * any customize code here
         */

        return parent::dispatch($request, $response);
    }
    public function onDispatch(MvcEvent $e)
    {
        $action = $this->params('action');
        //alertnatively 
        //$routeMatch = $e->getRouteMatch();
        //$action = $routeMatch->getParam('action', 'not-found');

        if(!method_exists(__Class__, $action."Action")){
           $this->noaction();
        }

        return parent::onDispatch($e);
    }
    public function noaction()
    {        
        echo 'action does not exits';   
    }
}   
于 2012-08-30T08:51:42.710 に答える
0

コントローラー内の Zf2 で、このようなモジュール、コントローラー、およびアクション名を取得します...

$controllerClass = get_class($this);
$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
$tmp = substr($controllerClass, strrpos($controllerClass, '\\')+1 );
$controllerName = str_replace('Controller', "", $tmp);

//set 'variable' into layout...
$this->layout()->currentModuleName      = strtolower($moduleNamespace);
$this->layout()->currentControllerName  = strtolower($controllerName);
$this->layout()->currentActionName      = $this->params('action');
于 2015-06-30T23:31:10.413 に答える
-6
$controllerName = strtolower(Zend_Controller_Front::getInstance()->getRequest()->getControllerName());
于 2013-01-24T07:59:52.560 に答える