在抽象基本控制器中获取路由前缀变量

时间:2020-04-01 09:47:32

标签: laravel routing

因此,我们正在为学校项目构建CMS,我们需要通过多个组织来使其动态化。在组的前缀中,添加一个$gid变量,该变量代表该组织的ID。

Route::middleware('auth')->prefix('{$gid}/admin')->group(function()

因此,我还创建了一个抽象的基本控制器,admin部分中的每个控制器都将继承。

abstract class BaseAdminController extends Controller

我现在想要的是路由中的$gid变量,并将其解析为构造函数中的基本控制器。

protected $gid;

public function __construct() {
    $this->gid = .....;
}

现在,我可以在任何地方访问此ID,而不必将其解析为每个单独的控制器和功能。

1 个答案:

答案 0 :(得分:0)

您不需要在每个操作中都“解析”它,但您应该保留它,因为否则,您将无法访问路线的其他参数,因为第一个参数丢失了,Laravel也无法正确分配下一个。而且您不需要在参数开头添加美元符号。

// routes/web.php
                                 // ↓ No dollar sign here
Route::middleware('auth')->prefix('{group}/admin')->group(function() {
    // Routes
});

// In any of your Controllers
use Illuminate\Http\Request:

class SomeController extends BaseController
{
    public function index(Request $request, Group $group) // you might add more parameters here
    {
        // Access your $group model
    }
}

如果不需要组模型,请不要定义参数的类型,并且不会加载相关数据:

public function index(Request $request, $group) // Now $group is just a number
相关问题