Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从一条laravel路线到另一条路线获取返回值_Php_Laravel_Laravel 5_Laravel 5.2 - Fatal编程技术网

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

Php 如何从一条laravel路线到另一条路线获取返回值,php,laravel,laravel-5,laravel-5.2,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'); }); 我想从第一个url到第二个url中的变量$other\u view获取返回值,以处理和操作返回值 使用

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

Route::get('/first_url', function () {
   return "Hello this is test";
});
我试过这样的方法,但没有成功

Route::get('/second_url', function () {
   $other_view = Redirect::to('first_url');
});
我想从
第一个url
第二个url
中的变量
$other\u view
获取返回值,以处理和操作返回值

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


有什么想法吗???或者我尝试做了错误的事情。

在这种情况下,你应该使用一个命名的路由。

像这样的事情:

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

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

如果您只想返回
第一个\u url
,请执行以下操作:

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

Route::get('/second_url', function () {
    return redirect()->route('firstRoute');
});
了解有关重定向到路由的详细信息

更新:

若要传递变量,可以使用form或仅创建带有参数的链接。您可以尝试这样的方法
{{route('second_url',['param'=>1])}

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

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

Route::get('/second_url', function () {
    redirect()->route('nameOfRoute');
});
Route::get('/second_url/{param}', ['uses' => 'MyController@myMethod', 'param' => 'param']);
MyController
中的
myMethod
方法:

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。您可以像这样将参数传递到特定的路由

路由::get('/second_url/{param}',['uses'=>'MyController@myMethod', “参数”=>“参数”])


您需要发送HTTP请求,然后处理响应。您可以按照@tommy的建议使用file_get_内容,也可以使用像Guzzle这样的HTTP库:

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

实现您想要的功能背后的想法是命名第一个路由的功能,并在第一个路由和第二个路由中调用它。您的函数只需将视图返回到第一个路由,然后为第二个路由检索呈现的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可能需要您安装所需的库。

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

这被认为是不好的做法

routes.php

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

    // Make use of rendered HTML
});
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('/first_url', 'TestController@getFirstUrl');
Route::get('/second_url', function () {
    $controller = new \App\Http\Controllers\TestController();
    $contentsOfFirstRoute = $controller->getFirstRoute();

    // Make use of rendered HTML
});

当有人转到“第二个url”时,您是否只想重定向到“第一个url”?如果没有的话,你能提供更多的细节吗。你肯定应该提供更多的细节。。。否则@AlexeyMezenin的答案就是你应该依赖的答案。(但我们只能猜测)@AlexeyMezenin,我想从第一个url到第二个url中变量$other_view的返回值。我在我的问题中添加了更多信息,请看一看。我在我的问题中添加了更多信息,请看一看。我想在从另一个url获取html后生成pdf,否则,我需要重新编码以使html表单成为pdf格式。所以我试着把一个路由url的html转换成另一个。这取决于你想如何生成PDF,但是这个解决方案对你来说应该是完美的。如果您正在为路由使用控制器,那么有一种方法可以通过手动调用目标控制器方法来获取另一个路由的渲染内容。可能是离题了,但为了获得最佳效果,我建议使用CLI工具生成PDF,因为它使用WebKit呈现目标页面。生成PDF就像调用
wkhtmltopdf一样简单http://example.com/first_url /path/to/output.pdf