如何为我的Laravel自定义程序包的控制器创建别名

时间:2019-03-04 13:43:01

标签: php laravel

我正在创建一个Laravel包供内部使用,这就是为什么它不在packagist中,也不在vendor/目录中的原因。相反,它位于packages/目录-我们的自定义目录中-与我们用于another package of our internal use的方法类似。

问题是,在包装中的刀片中,我们使用了action('MyPackageController@method')来生成链接。将视图文件发布到应用程序后,视图的当前路径类似于resources/views/vendor/mypackage/one-directory/index.blade.php

具有对控制器的全局访问权限,它就可以正常工作:

action('\MyVendor\MyPackage\App\Controllers\MyPackageController@edit', ['id' => $item->id])

但是问题是,当我尝试impose aliases作为控制器时,它们无法正常工作。在config/app.php别名中,我提到:

'XYZ' => MyVendor\MyPackage\App\Controllers\MyPackageController::class,
'ABC' => MyVendor\MyPackage\App\Controllers\MyPackageSecondController::class,

,在index.blade.php中,我尝试使用:

action('ABC@edit', ['id' => $item->id])

但是它不起作用。因为它正在尝试在App\Http\Controllers\中找到控制器,所以:

  

ErrorException(E_ERROR)
  未定义操作App \ Http \ Controllers \ ABC @ edit。 (视图:D:\ laragon \ www \ test-laravel \ resources \ views \ vendor \ mypackage \ one-directory \ index.blade.php)

包控制器不是别名吗?

PS。。我尝试清除所有类型的缓存。

2 个答案:

答案 0 :(得分:0)

即使很长一段时间后,Martin Bean都没有向该线程添加任何答案,所以我在这里发布一个答案以供将来记录:

如马丁·宾恩(Martin Bean)在评论中所说:

您使用的是命名路线,而不是action(): laravel.com/docs/master/routing#named-routes

我发现的是:the action() function有它自己的警告,它不能使用App\Http\Controllers以外的其他名称空间。因此named route为我做了:route('my_name', ['id' => $item->id]);

感谢马丁·宾(Martin Bean)的线索。

答案 1 :(得分:-1)

首先,您必须在包裹的服务提供商中注册路线。

boot() { 
    require __DIR__ . '/Http/routes.php';
}

__DIR__指向包文件夹的根目录。这是假设您的路由已在软件包的Http目录中注册。如果这样做,请确保为路由使用唯一的名称,然后像这样调用操作: action="{{route-name}}"

这就是您要做的一切。