扩展Laravel路由器

时间:2016-07-19 17:54:49

标签: php laravel router

我实施了角色/权限系统。现在我想为Laravel路由器添加一个方法,这样我就可以做到这样的事情:

Route::get('sales', 'SaleController@index')->allow('Salesman');

我知道我可以使用@can('Salesman') (查看)$user->can('Salesman') (控制器),但我发现我的方式非常可读我试图这样做,因为我将能够在路径文件中看到所有角色权限访问。

2 个答案:

答案 0 :(得分:1)

您可以覆盖路由器类,然后将其注册到服务容器中以供Route外观使用。

更清楚:

  • 编写一个扩展Laravel路由器的类(我认为是Router类)。要找到它,请打开Route外观,然后找到其服务提供商。从那里,应该很容易找到路由器类。
  • 编写一个覆盖该路由器的类。确保扩展您之前找到的课程。
  • 编写覆盖路由器服务的服务提供商。实际上,这意味着使用您在Route facade。中找到的相同密钥名称注册您的服务。

那应该是它。您的服务现在由Route外观自动选择。

答案 1 :(得分:0)

当您使用立面来生成路线时。这应该很容易。可以在SELECT FamID, ISNULL(MaleName+' ','') + CASE WHEN MaleName IS NULL OR FemaleName IS NULL THEN '' ELSE 'and ' END+ ISNULL(FemaleName,'') AS FirstName, LName FROM #Temp facades数组中推翻外观。

您可以生成自己的Facade class并替换原有的Router class。实际上这是一个Route。为了实现您需要按顺序扩展和覆盖以下内容的功能:

  • 门面
  • 路由器:: newRoute
  • enter image description here

通过扩展最后一个并在路由器的config/app.php方法中返回它们,您将能够否决Laravel的逻辑。