[英]How to make aliases for Controller of my Laravel custom package
我正在为我们内部使用创建一个 Laravel 包,这就是为什么它不在 packagist 中,也不在vendor/
目录中。 相反,它位于packages/
目录中 - 我们的自定义目录 - 我们用于内部使用的另一个包的类似方法。
问题是,在包的刀片中,我们使用action('MyPackageController@method')
来生成链接。 将视图文件发布到应用程序后,视图的当前路径类似于resources/views/vendor/mypackage/one-directory/index.blade.php
。
通过对控制器的全局访问,它可以正常工作:
action('\MyVendor\MyPackage\App\Controllers\MyPackageController@edit', ['id' => $item->id])
但问题是,当我尝试为控制器 [s] 强加别名时,它们不起作用。 在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\\
找到App\\Http\\Controllers\\
:
错误异常 (E_ERROR)
Action App\\Http\\Controllers\\ABC@edit 未定义。 (查看:D:\\laragon\\www\\test-laravel\\resources\\views\\vendor\\mypackage\\one-directory\\index.blade.php)
包控制器不是别名吗?
附注。 我尝试清除所有类型的缓存。
即使过了很长时间,Martin Bean 也没有在该线程中添加任何答案,因此我在这里发布一个以供将来记录:
正如马丁·比恩(Martin Bean)在评论中所说:
您使用了命名路由而不是
action()
:laravel.com/docs/master/routing#named-routes
我发现的是: the action()
函数有它自己的警告,它不能采用除App\\Http\\Controllers
之外的其他命名空间。 所以命名路由为我做了: route('my_name', ['id' => $item->id]);
.
感谢 Martin Bean 提供的线索。
首先,您必须在包裹的服务提供商中注册您的路线。
boot() {
require __DIR__ . '/Http/routes.php';
}
__DIR__
将指向包文件夹的根目录。 这是假设您的路由已在您的包的 Http 目录中注册。 如果这样做,请确保为您的路线使用唯一的名称,并像这样调用您的操作: action="{{route-name}}"
这就是你所要做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.