【问题标题】:I don't understand routing看不懂路由
【发布时间】:2015-08-25 13:51:25
【问题描述】:

我正在尝试学习 PHP 框架。但是我在理解路由的一些概念时遇到了一些困难。

我选择使用Flight。他们的主页显示:

require 'flight/Flight.php';

Flight::route('/', function(){
    echo 'hello world!';
});

Flight::start();

我不明白他们用Flight::route... 做什么。我错过了什么?这个问题甚至与飞行无关。它与一般的路由有关。

【问题讨论】:

  • 你问什么是::运营商?
  • @Leggendario 我只是不确定路由。我明白 :: 是什么,我只是没有得到整个路由的东西。以及为什么索引页的路由代码里面有一个函数。为什么 index.php 页面内有路由代码——它到底是做什么的?

标签: php routing flightphp


【解决方案1】:

route() 似乎是一个静态函数,这意味着它不是特定于对象的,即您不能创建诸如

之类的对象
$flight = new Flight();

然后调用

$flight->route(...)

而是通过类(不是对象,它是类的特定实现)调用它。使用 :: 调用类的静态函数,在这种情况下

Flight::route(...)

路由的内容只是说,当你遇到'/'时,做'X'......在你的情况下'X'是

function(){
    echo 'hello world!';
}

在后面的阶段你可以匹配类似的东西

'/' (homepage, i.e. "mywebsite.com/")
'/about-us' (About Us page, i.e. "mywebsite.com/about-us")
'/user/{id}' (User page, i.e. you can pass a parameter such as "mywebsite.com/user/taylor" and then get the user data)

或任何你想要的。而不是仅仅将函数写入路由文件,你可以告诉路由器去一个特定的函数(通常是一个控制器函数),你可以在那里做更多的事情。

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    路由基本上将 HTTP 请求映射到您的方法/函数。

    简单地说,假设你有路线:

    Flight::route('/page1', function() {
        echo 'page1!';
    });
    

    这基本上是发生的:

    1. 客户端请求example.com/page1
    2. 服务器向 PHP 发送查询
    3. 您的 PHP 框架解析请求 URL
    4. 选择正确的路线,在我们的例子中,page1/
    5. 最后调用你传入的函数,所以基本上echo 'page1';

    【讨论】:

      【解决方案3】:

      您的文件中似乎发生了什么(我不熟悉 Flight)

      require 'flight/Flight.php'; 很可能为所有路由定义一个类。

      那么Flight::route(); 只是使用了Flight 类中的route() 方法,没有类的实例。

      Flight::route('/', function(){
          echo 'hello world!';
      });
      

      这里发生的是当路由匹配时(通过匹配意味着用户的 URI 与您的路由上的 URI 匹配,在这种情况下 www.yourdomain.com/ 将匹配 '/' 路由)然后是 @987654328 中的代码@回调被执行。

      如果您添加其他路线

      Flight::route('/about', function(){
          echo 'About Us';
      });
      

      当用户访问www.yourdomain.com/about时,他会得到该路由中的内容。

      【讨论】:

      • 谢谢@Sandman,这帮助很大。因此,如果我理解正确的话,在我看来,这就像单页 Web 应用程序的工作方式。我们有一堆函数/控制器,一个页面,在这个页面上我们确定请求了哪个“页面”并调用适当的函数(它将显示适当的内容)?
      • 没错,虽然它不仅限于单页网站,但任何网站,取决于你如何处理它,我经常添加一个路由器库只是为了添加 SEO 和路由控制到旧静态网站。作为示例Flight::route('/', function(){ include 'index.php'; }); 和另一个路由将是Flight::route('/about-us', function(){ include 'about_us.php'; }); 现在这是一个如何路由旧静态网站的示例,现在理想情况下您有一个适合每个页面的控制器。
      【解决方案4】:
      Flight::route('/', function(){
          echo 'hello world!';
      });
      

      这个 sn-p 是您项目的核心。

      这将接受两个参数。

      1. 路线

      2. 在这个路由调用上调用的方法

      考虑下面的代码sn-p,如果你有你的项目目录http://localhost/flight_project/,当有人请求这个目录时,定义为'function_here'的函数将被调用。

      Flight::route('/', 'function_here');
      

      如果您定义了如下路线,

      Flight::route('/user/', function(){
          // do something here
      });
      

      当有人访问http://localhost/flight_project/user/时,上面的内联函数被调用。

      更多信息HERE

      【讨论】:

        【解决方案5】:

        Flightphp 对如何设置路由here 有相当全面的解释。

        您应该将路由视为如何处理不同请求模式的定义。 Flight 主页上的示例表明,如果您点击站点根目录(即 /),它将简单地返回“hello world!”作为回应。

        如果您进一步阅读 Flightphp 安装页面,您会注意到所有请求都由 index.php 页面处理。因此,根据您定义的路由,它会回复为该 url 请求模式定义的相关响应。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-11
          • 2018-09-08
          • 2017-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多