Laravel 生成 url,默认值

官网是这样写的
对于某些应用程序,你可能希望为某些 URL 参数的请求范围指定默认值。例如,假设有些路由定义了 {locale} 参数:

Route::get('/{locale}/posts', function () {
    //
})->name('post.index');

每次都通过 locale 来调用辅助函数 route 也是一件很麻烦的事情。 因此,使用 URL::defaults 方法定义这个参数的默认值,可以让该参数始终存在当前请求中。然后就能从 路由中间件 调用此方法来访问当前请求:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;

class SetDefaultLocaleForUrls
{
    public function handle($request, Closure $next)
    {
        URL::defaults(['locale' => $request->user()->locale]);

        return $next($request);
    }
}

我的操作
路由web.php

Route::get('{locale}/posts', function () {
  return "ceshi";
})->name('post')->middleware('locale');

中间件
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;

class SetDefaultLocaleForUrls
{
  public function handle($request, Closure $next)
 { URL::defaults(['locale' => "en"]);
  return $next($request);
 }}

注册中间件

 'locale'=>\App\Http\Middleware\SetDefaultLocaleForUrls::class

随便一个控制器

public function root()
{
  echo route("post");
}

运行报错。

Laravel 生成 url,默认值

各路大神,你们是怎样解决的呢?

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

随便一个控制器

你随便的这个控制器要走 locale 中间件才行。

4年前 评论

解决了:
路由:

Route::get('{locale}/posts', function () {
    return route("post_index");
})->name('post_index')->middleware('locale');
中间件
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
    public function handle($request, Closure $next)
    {
        URL::defaults(['locale' => "en"]);
        return $next($request);
    }
}
注册
'locale'=>\App\Http\Middleware\SetDefaultLocaleForUrls::class

测试
http://localhost:8000/en/posts
结果:http://localhost:8000/en/posts

或者
Route::get('/','Pagescontroller@root')->name('root');
controller这样
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
class Pagescontroller extends Controller
{
    public function root()
    {
        URL::defaults(['locale' => "en"]);
        echo route('post_index');
        //return view('pages.root');
    }
}

http://localhost:8000/
结果:http://localhost:8000/en/posts
或者这个控制器加上中间件
Route::get('/','Pagescontroller@root')->name('root')->middleware('locale');
http://localhost:8000/
结果:http://localhost:8000/en/posts

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!