使用供应商软件包时,雄辩的模型绑定不起作用

时间:2019-05-02 15:31:57

标签: php laravel eloquent

我正在使用以下软件包Spatie Laravel Mail Templates

我创建了一个资源控制器来CRUD模板和以下路由声明:

Route::resource('mailtemplates', 'MailTemplateController');

如果我访问/mailtemplate/1,则它不是使用primaryKey加载模型,而只是通过方法中的1传递。在我的控制器中:

use Spatie\MailTemplates\Models\MailTemplate;

...

public function show(MailTemplate $mailTemplate)

来自dd($mailTemplate)

的回复
MailTemplate {#592 ▼
#guarded: []
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}

难道连接和表都为空?

我可以在MailTemplate class中看到它正在扩展口才模型。

有什么建议为什么不加载?

2 个答案:

答案 0 :(得分:0)

这是因为route参数和show()函数参数名称不匹配。

因此,更改路线或更改显示功能。

解决方案一:创建自定义路线

// in this case you cant stick with resource route
Route::get('mailtemplates/{mailTemplate}', 'MailTemplateController@show');

解决方案二:更改显示功能

public function show(MailTemplate $id)

答案 1 :(得分:0)

尝试将控制器参数中的$mailTemplate更改为$mailtemplate(小写t)

docs中,您可以默认看到参数名称是资源的单数版本。给定您的资源名称mailtemplates,我希望正确的参数名称为mailtemplate

php中的变量区分大小写,因此。$mailTemplate不匹配。