Altorouter无法弄清楚如何正确路由PHP

时间:2016-04-01 08:37:18

标签: php routing routes altorouter

如果您在链接之前没有使用过此链接:http://altorouter.com/

我正在制作一个小应用程序,但不需要框架,只需要路由部分。所以我决定尝试altorouter,因为它看起来很简单。

我想映射某些路线来做某些事情。例如:

www.example.com/products/

这应该显示我的products.php模板并从数据库中提取数据以填充字段。我有以下工作:

$router->map( 'GET', '/products', function() {
    require('partials/connectdb.php'); //Require Database Connection
    $pageContent = getProductsContent($conn); //prepare all the page content from database
    require __DIR__ . '/products.php'; //require the template to use
});

对于所有其他标准页面都一样,我的问题是路线何时可以改变。例如:

www.example.com/shoes/

www.example.com/shorts /

www.example.com/shirts /

www.example.com/ties /

当用户进入这些路线时,我想获得参数'鞋',然后在使用products.php模板时,只为鞋子做逻辑。

所以看看它说你可以做的文档:

www.example.com / [*] //这意味着什么。

然而,在将其添加到我列出的路线中之后,它会使用户尝试访问的任何其他内容无效。所以,如果他们访问:

www.example.com/products //喜欢它之前的工作

它实际上是内部的逻辑:

www.example.com / [*]

有谁知道altorouter并且可以帮助我吗?我将在下面粘贴我的完整页面代码:

// Site Router
$router->map( 'GET', '/', function() {
    require('partials/connectdb.php'); //Require Database Connection
    $pageContent = getHomeContent($conn);
    require __DIR__ . '/home.php';
});


$router->map( 'GET', '/products', function() {
    require('partials/connectdb.php'); //Require Database Connection
    $pageContent = getProductsContent($conn);
    require __DIR__ . '/products.php';
});


$router->map( 'GET', '/[*]', function($id) {
    require('partials/connectdb.php'); //Require Database Connection


    $test = 'this was a test';
    $pageContent = getProductsContent($conn);
    require __DIR__ . '/products.php';
});

// match current request url
$match = $router->match();

// call closure or throw 404 status
if( $match && is_callable( $match['target'] ) ) {
    call_user_func_array( $match['target'], $match['params'] );
} else {
    // no route was matched
    header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}

1 个答案:

答案 0 :(得分:0)

你的网址应该是

public DataSet getDataTable_sp(string sp_name, SqlParameter[] p = null) { DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(Connstr)) { SqlDataAdapter da = new SqlDataAdapter(sp_name,conn); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.SelectCommand.CommandTimeout = 300; if (p != null) for (int i = 0; i < p.Count(); i++) da.SelectCommand.Parameters.Add(p[i].ParameterName, p[i].SqlDbType, p[i].Size).Value = p[i].Value; conn.Open(); da.Fill(ds); // this is the line that the exception is thrown conn.Close(); } return ds; }

www.example.com/products/

www.example.com/products/shoes

然后你可以这样做:

www.example.com/products/shirts