【问题标题】:Pass data from routes.php to a controller in Laravel将数据从 routes.php 传递到 Laravel 中的控制器
【发布时间】:2014-10-30 07:09:41
【问题描述】:

我正在尝试在 Laravel 中为动态 URL 创建一个路由来加载特定的控制器操作。我可以使用以下代码将其路由到控制器:

Route::get('/something.html', array('uses' => 'MyController@getView'));

我无法弄清楚如何将变量从该路由传递到控制器。在这种情况下,我想将一个 id 值传递给控制器​​操作。

这在 Laravel 中可行吗?有没有其他方法可以做到这一点?

【问题讨论】:

  • 阅读laravel.com/docs/routing#route-parameters 您的.html 后缀在您的网站中真的有必要吗?
  • 我确实读过。那里没有任何内容涵盖我想做的事情。我正在尝试将 URL 中未包含的信息传递给控制器​​。如果可能的话,我希望能够保留 .html 后缀。
  • 然后只需 POST 到你的路由,记住 HTTP 是无状态的。 stackoverflow.com/questions/13200152/…

标签: laravel laravel-4 laravel-routing


【解决方案1】:

您没有向我们提供足够的信息,因此您需要问自己两个基本问题:这些信息来自哪里?您可以在不通过 routes.php 文件传递​​的情况下访问控制器内部的这些信息吗?

如果您打算在您的“routes.php”文件中以某种方式生成此信息:

$information = WhateverService::getInformation();

你不能在这里将它传递给你的控制器,因为你的控制器并没有真正在这个文件中被触发,这只是一个可用路由的列表,在某些时候可能会或可能不会被命中。当路由被命中时,Laravel 将通过另一个内部服务触发该路由。

但您可能可以在控制器中使用完全相同的代码行:

class MyController extends BaseController {

    function getView()
    {
        $information = WhateverService::getInformation();

        return View::make('myview')->with(compact('information'));
    }

}

在 MVC 中,控制器旨在接收 HTTP 请求并通过模型(或服务或存储库)生成信息以传递给您的视图,从而生成新的网页。

如果此信息是您页面中的内容,并且您想将其偷偷带到您的 something.html 路由中,请使用 POST 方法而不是 GET:

Route::post('/something.html', array('uses' => 'MyController@getView'));

在您的控制器内部通过以下方式接收该信息:

class MyController extends BaseController {

    function getView()
    {
        $information = Input::get('information');    

        return View::make('myview')->with(compact('information'));
    }

}

【讨论】:

  • 你的方法有效。我可以使用我正在使用的相同信息来确定我是否希望该路由在我的控制器中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2021-12-29
  • 1970-01-01
  • 2019-04-13
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多