如何从一条 laravel 路由获取返回值到另一条路由

How to get retuned value from one laravel route into another route

如何将一条路线的价值转化为另一条路线

Route::get('/first_url', function () {
   return "Hello this is test";
});

我尝试过类似的方法但没有成功。

Route::get('/second_url', function () {
   $other_view = Redirect::to('first_url');
});

我想从 first_url 获取返回值到 second_url 中的变量 $other_view 以处理和操作返回值。

使用重定向正在改变 url。我不想用。

有什么想法吗???还是我在尝试做错事。

在这种情况下,您应该使用命名路由。 https://laravel.com/docs/5.1/routing#named-routes

像这样的东西:

Route::get('/first_url', ['as' => 'nameOfRoute', function () {
    return "Hello this is test";
}]);

Route::get('/second_url', function () {
    redirect()->route('nameOfRoute');
});

如果您只想 return first_url,请执行以下操作:

Route::get('/first_url', ['as' => 'firstRoute', function () {
    return "Hello this is test";
}]);

Route::get('/second_url', function () {
    return redirect()->route('firstRoute');
});

详细了解重定向到路由 here

更新:

如果你想传递变量,你可以使用表单或者创建一个带参数的link。你可以试试这样 {{ route('second_url', ['param' => 1]) }}

那么您的第二条路线将如下所示:

Route::get('/second_url/{param}', ['uses' => 'MyController@myMethod', 'param' => 'param']);

myMethod中的方法MyController

public function myMethod($param){
    echo $param;
...

我不知道你为什么要这样做,但你可以通过对你的路由执行一个简单的 HTTP 请求并读取内容来获取路由的渲染内容:

Route::get('/second_url', function () {
   $other_view = file_get_contents(URL::to('first_url'));

   return $other_view; // Outputs whatever 'first_url' renders
});

您不能将变量值直接传递给另一个路由。 http是无状态协议。如果你想将变量的值保存到另一条路由,你可以通过 3 种方法来实现查询字符串、会话和 cookie。您可以像这样将参数传递给特定路线

Route::get('/second_url/{param}', ['uses' => 'MyController@myMethod', 'param' => 'param']);

您需要发送 HTTP 请求,然后处理响应。您可以按照@tommy 的建议使用 file_get_contents,也可以使用 Guzzle 之类的 HTTP 库:

$client = new GuzzleHttp\Client();
$res = $client->get(route('firstRoute'));

实现您想要的目标的想法是命名您的第一条路线的功能,并在第一条路线和第二条路线中调用它。您的函数将简单地 return 到第一条路线的视图,并为您的第二条路线检索呈现的 html。

function MyFirstRouteFunction() {
    // Do whatever your do in your first route
    // I assume your function return here an instance of Laravel's View
}

Route::get('/first_url', MyFirstRouteFunction);

Route::get('/second_url', function () {
    $contentsOfFirstRoute = MyFirstRouteFunction()->render();

    // Make use of rendered HTML
});

无需再发出一个额外的 HTTP 请求。

您应该使用 Guzzle 或 curl 来实现:

Route::get('/second_url', function () {

    //:::::Guzzle example:::::
    $client = new GuzzleHttp\Client(); 
    $res = $client->request('GET', 'http://...second_url...', []);

    //:::::curl example:::::    
    $ch = curl_init();

    //define options
    $optArray = array(
        CURLOPT_URL => 'http://...second_url...',
        CURLOPT_RETURNTRANSFER => true
    );
    //apply those options
    curl_setopt_array($ch, $optArray);

    //execute request and get response
    $res = curl_exec($ch);

});

请注意,使用 Guzzle 可能需要您安装所需的库。

如果您将 first_route 闭包放入控制器操作中,您可以尝试实例化该控制器并直接调用该方法。

这被认为是不好的做法。

routes.php

Route::get('/first_url', 'TestController@getFirstUrl');

App/Http/Controllers/TestController.php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function getFirstUrl()
    {
        return view('my-view');
    }
}

routes.php

Route::get('/second_url', function () {
    $controller = new \App\Http\Controllers\TestController();
    $contentsOfFirstRoute = $controller->getFirstRoute();

    // Make use of rendered HTML
});