繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM