映射在PHP路线最简单的方法(Easiest way to map route in PHP)

2019-06-25 07:36发布

我在浏览的Symfony的网站。 我真的不觉得我需要所有的框架提供的功能,但我不喜欢的路由部分。 它允许你指定这样的URL模式

/some/path/{info}

现在,像URL www.somewebsite.com/app.php/some/path/ANYTHING它允许您发送特定的客户端此URL的响应。 你也可以使用字符串任何东西,用它类似GET参数。 还有一个选项,隐藏这让我们喜欢的网址URL的一部分app.php www.somewebsite.com/some/path/ANYTHING 。 我的问题是什么是做,而无需复杂的框架最好的方法?

Answer 1:

我推荐这篇文章http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/使用Apache mod_rewrite的,你不需要任何框架只是PHP了解URL重写。 另外这是在任何深度框架实现



Answer 2:

我已经用相同的路由语法我自己的迷你框架。 这是我做的:

  1. 使用mod_rewrite存储参数(如/some/path/{info}的) $_GET变量我叫params

    RewriteRule ^(.+)(\?.+)?$ index.php?params=$1 [L,QSA]

  2. 解析参数,并将其储存在全球范围使用此功能:

    public static function parseAndGetParams() {

     // get the original query string $params = !empty($_GET['params']) ? $_GET['params'] : false; // if there are no params, set to false and return if(empty($params)) { return false; } // append '/' if none found if(strrpos($params, '/') === false) $params .= '/'; $params = explode('/', $params); // take out the empty element at the end if(empty($params[count($params) - 1])) array_pop($params); return $params; 

    }

  3. 路由动态正确的页面:

     // get the base page string, must be done after params are parsed public static function getCurPage() { global $params; // default is home if(empty($params)) return self::PAGE_HOME; // see if it is an ajax request else if($params[0] == self::PAGE_AJAX) return self::PAGE_AJAX; // see if it is a multi param page, and if not, return error else { // store this, as we are going to use it in the loop condition $numParams = count($params); // initialize to full params array $testParams = $params; // $i = number of params to include in the current page name being checked, {1, .., n} for($i = $numParams; $i > 0; $i--) { // get test page name $page = strtolower(implode('/', $testParams)); // if the page exists, return it if(self::pageExists($page)) return $page; // pop the last param off array_pop($testParams); } // page DNE go to error page return self::PAGE_ERROR; } } 

这里的价值是,它看起来在大多数特定页面的最具体的页面。 此外,框架外的锻炼让您完全控制 ,所以如果有什么地方的错误,你知道你可以解决它-你不必找一些奇怪的解决办法在你的框架。

所以,现在$params是全球性的,它使用一个参数的任何页面只需调用$params[X]与它合作。 友好的URL没有一个框架。

然后我添加页面的方式是我把它们变成在看着一个数组pageExists($page)调用。

对于AJAX调用,我把一个特殊的IF:

// if ajax, include it and finish
if($page == PageHelper::PAGE_AJAX) {
    PageHelper::includeAjaxPage();
    $db->disconnect();
    exit;
}

瞧 - 自己的微路由框架。



Answer 3:

问题是,一个路由是一个框架,一个复杂的事情。

也许你看看Silex的 。 它的基础上,Symfony2的组件的微架构。 它没有那么大的Symfony2,但有一些特点。



文章来源: Easiest way to map route in PHP