Laravel 5.1 - 获取当前路线
Laravel 5.1 - get current route
我正在开发一种功能,可以为每个视图自动获取资产 (.css, .js)。所以它适用于比方说“http://mywebsite.com/displayitems”、/home、/about 等
但是自从我使用 $_SERVER['REQUEST_URI']
编写函数以来,由于路由中的“/1”,当我有一个像 /displayitems/1
这样的路由时,我遇到了一个问题。
当时在 Laravel 4.x 我有一个很好的方法来做到这一点,但遗憾的是它在 Laravel 5.4.
中的工作方式不同
我一直在网上搜索获取当前路线的好方法,但没有成功。问题是我必须忽略请求中的任何参数 URL.
如果有人有线索,或者我做错了,有完全不同的更好方法吗?
P.S 我当前的函数:
public static function getAllRouteAssets() {
$route = $_SERVER['REQUEST_URI'];
if($route == "/") {
$tag = '<link href="' . asset("assets/css/pages/home.css") . '" rel="stylesheet" type="text/css"/>';
}
else {
// CSS
$tag = '<link href="' . asset("assets/css/pages" . $route . ".css") . '" rel="stylesheet" type="text/css"/>';
}
echo $tag;
//TODO: Check if file exists, homepage condition, js...
}
你可以试试这个:
// Add the following (`use Illuminate\Http\Request`) statement at top your the class
public static function getAllRouteAssets(Request $request)
{
// Get the current route
$currentRoute = $request->route();
}
更新(从IoC/Service容器获取请求实例并调用route()
获取当前路由):
app('request')->route(); // Current route has been retrieved
如果你想将当前路由作为参数传递给你的 getAllRouteAssets
方法,那么你必须更改 typehint
或传递 Request
并调用 route
方法来自 getAllRouteAssets
方法。
我知道这有点老了,但是有一种方法可以为您提供完整的查询路径:
$request->getPathInfo();
但是,请注意,如果您还想获取查询字符串,这将不起作用。 (仅供参考,Laravel 5 默认不支持查询字符串)
您可以通过以下方式从查询字符串中单独获取 GET 变量:
$request->input('id');
示例:
http://laravel.com/api/users/?id=123
会 return /api/users
使用 getPathInfo()
和 123
使用 $request->input('id');
我正在使用 Laravel 5.5.20。我还需要在没有获取参数的情况下获取部分路由。在 web.php 中定义的路由没有问号(?),例如:
Route::get('board/{param_1}/{param_2}', 'BoardController@index');
在那种情况下,我没有在路线 class 中看到直接方法来获取没有 url 参数的部分。
这是我如何获得静态部分 (/board):
...
use Illuminate\Support\Facades\Route;
..
$staticPrefix = Route::getCurrentRequest()->route()->getCompiled()->getStaticPrefix();
...
我正在开发一种功能,可以为每个视图自动获取资产 (.css, .js)。所以它适用于比方说“http://mywebsite.com/displayitems”、/home、/about 等
但是自从我使用 $_SERVER['REQUEST_URI']
编写函数以来,由于路由中的“/1”,当我有一个像 /displayitems/1
这样的路由时,我遇到了一个问题。
当时在 Laravel 4.x 我有一个很好的方法来做到这一点,但遗憾的是它在 Laravel 5.4.
中的工作方式不同我一直在网上搜索获取当前路线的好方法,但没有成功。问题是我必须忽略请求中的任何参数 URL.
如果有人有线索,或者我做错了,有完全不同的更好方法吗?
P.S 我当前的函数:
public static function getAllRouteAssets() {
$route = $_SERVER['REQUEST_URI'];
if($route == "/") {
$tag = '<link href="' . asset("assets/css/pages/home.css") . '" rel="stylesheet" type="text/css"/>';
}
else {
// CSS
$tag = '<link href="' . asset("assets/css/pages" . $route . ".css") . '" rel="stylesheet" type="text/css"/>';
}
echo $tag;
//TODO: Check if file exists, homepage condition, js...
}
你可以试试这个:
// Add the following (`use Illuminate\Http\Request`) statement at top your the class
public static function getAllRouteAssets(Request $request)
{
// Get the current route
$currentRoute = $request->route();
}
更新(从IoC/Service容器获取请求实例并调用route()
获取当前路由):
app('request')->route(); // Current route has been retrieved
如果你想将当前路由作为参数传递给你的 getAllRouteAssets
方法,那么你必须更改 typehint
或传递 Request
并调用 route
方法来自 getAllRouteAssets
方法。
我知道这有点老了,但是有一种方法可以为您提供完整的查询路径:
$request->getPathInfo();
但是,请注意,如果您还想获取查询字符串,这将不起作用。 (仅供参考,Laravel 5 默认不支持查询字符串)
您可以通过以下方式从查询字符串中单独获取 GET 变量:
$request->input('id');
示例:
http://laravel.com/api/users/?id=123
会 return /api/users
使用 getPathInfo()
和 123
使用 $request->input('id');
我正在使用 Laravel 5.5.20。我还需要在没有获取参数的情况下获取部分路由。在 web.php 中定义的路由没有问号(?),例如:
Route::get('board/{param_1}/{param_2}', 'BoardController@index');
在那种情况下,我没有在路线 class 中看到直接方法来获取没有 url 参数的部分。 这是我如何获得静态部分 (/board):
...
use Illuminate\Support\Facades\Route;
..
$staticPrefix = Route::getCurrentRequest()->route()->getCompiled()->getStaticPrefix();
...