我正在创建一个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。。我尝试清除所有类型的缓存。
答案 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}}"
这就是您要做的一切。