如何将一条路线的价值转化为另一条路线
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正在更改网址。我不想使用它。
任何想法???或者我在做错误的事情。
答案 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
});