如何从一条laravel路线返回到另一条路线的返回值

时间:2016-03-26 12:35:05

标签: php laravel laravel-5 laravel-5.2

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

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

我试过这样的事但没有奏效。

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

我希望first_url中的$other_view返回值到second_url中的变量{{1}}来处理和操作返回的值。

使用Redirect正在更改网址。我不想使用它。

任何想法???或者我在做错误的事情。

8 个答案:

答案 0 :(得分:5)

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

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

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

详细了解路线here的重定向。

<强>更新

如果要传递变量,可以使用表单或只创建带参数的链接。您可以尝试这样的{{ route('second_url', ['param' => 1]) }}

然后你的第二条路线将如下所示:

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

myMethod中的MyController方法:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

您需要发送HTTP请求,然后处理响应。您可以像@tommy建议的那样使用file_get_contents,也可以像Guzzle一样使用HTTP库:

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

答案 3 :(得分:1)

在这种情况下,你应该使用命名路线。 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');
});

答案 4 :(得分:1)

您无法直接将变量值传递给其他路径。 http是无状态协议。如果要将变量的值保存到另一个路由,则可以通过3种方法查询字符串,会话和cookie。您可以将参数传递到特定路线,如此

  

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

答案 5 :(得分:1)

实现您想要的目标背后的想法是命名第一条路线的功能,并在第一条路线和第二条路线中调用它。您的函数将简单地将视图返回到第一个路径,并为您的第二个路径检索渲染的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请求。

答案 6 :(得分:1)

你应该使用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可能需要您安装所需的库。

答案 7 :(得分:1)

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

这被认为是不好的做法。

routes.php文件

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

应用/ HTTP /控制器/ 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
});