我是Laravel的新手,我试着抓住路线,一切都在地方之后(" us_en /")。
这是我的控制器
<?php
namespace App\Http\Controllers\SitePublic;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\App;
class HomeController extends Controller
{
public function index(Request $request,$account,$location) {
dd($request->path());
$loc=explode("_", $location);
$locale = $loc[0];
$lang= $loc[1];
App::setLocale($lang);
return view('homeProfPublic')->with(['account' => $account,'active' => 'home','lang'=>$lang,"locale"=>$locale]);
}
}
现在我使用$ request-&gt; path()来获取路线中的所有内容。
我的路线图就像这样
mySite.com/userAccount =>User's home page with English as default language
mySite.com/userAccount/us_sp =>User's home page in Spanish
mySite.com/userAccount/us_sp/contact =>User's contac page in Spanish
...
所以 $ request-&gt; path()可以给我完整的URL,我可以使用php explode来获取所有的语言环境(如果是这种情况)。
所以我的问题是,是否在Laravel中已经完成了一些功能或方法来解决这种情况?如果是的话是什么?
答案 0 :(得分:0)
您不需要使用$ request 如果正确设置路径:您可以在控制器功能中接收参数
您可以设置3条路线来分隔不同功能中的逻辑或使用可选参数分隔逻辑
Route::get('/userAccount/{language?}/{method?}', 'YourController@index');
然后,在控制器中指定参数的默认值:
public function index($language=null, $method=null) {
list($locale, $lang) = explode('_', $language);
var_dump($locale);
var_dump($lang);
var_dump($method);
}
您将获得url / userAccount / us_sp / contact
string'us'(length = 2)
string'sp'(length = 2)
字符串'contact'(长度= 7)
更新您可以创建中间件并处理所有网址
php artisan make:middleware ProcessLanguageRoutes
您需要在app / Http / Kernel.php文件中注册中间件
protected $middlewareGroups = [
'web' => [
...
\App\Http\Middleware\ProcessLanguageMenu::class,
],
然后,您可以在handle函数中处理数据,检查$ request变量
public function handle($request, Closure $next)
{
if ($request) { // check something
// do something
}
return $next($request);
}