如何检查两个url是否指向相同的控制器和动作,在cakephp 3中?

时间:2015-03-31 07:36:23

标签: url cakephp-3.0

我有这样的网址。$myUrl = 'posts/index';。我需要将这个url与传递给我的方法的另一个url进行比较,以找出它们是否具有相同的控制器和动作。

public function compareUrls($url) {
    $myUrl = 'posts/index';
    //returns true if both urls point to the same controller and action otherwise returns false
}

传递的url可以是cakephp中的任何合法网址。例如:

$url0 = '/';//false
$url1 = 'posts';//true
$url2 = 'posts/index';//true
$url3 = 'en/posts/index/3/foo';//true
$url4 = ['controller'=>'posts' , 'action'=>'index'];//true
$url5 = ['controller'=>'posts' , 'action'=>'index' , 'p1' , 'p2'];//true

或其他。

1 个答案:

答案 0 :(得分:0)

您的功能可能是

public function compareUrls($urlString)
{
    $myUrlString = 'posts/index';
    $myUrl = Router::parse($myUrlString);
    $url = Router::parse($urlString);
    if ($myUrl['controller'] == $url['controller'] && $myUrl['action'] == $url['action']) {
        return true;
    } else {
        return false;
    }
}

Route::parse可以做到。

示例:debug(Router::parse('/admin/users/index'))将返回

[
    'controller' => 'Admin',
    'action' => 'users',
    'pass' => [
        (int) 0 => 'index'
    ],
    'plugin' => null
]
  

请注意   Route::parse   仅适用于字符串网址,您需要在控制器中使用Cake\Routing\Router namspace