如何从一条 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
});
如何将一条路线的价值转化为另一条路线
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
});