Laravel方法模型绑定?

时间:2015-04-17 15:52:07

标签: php laravel laravel-5

我将一个大型项目从CodeIgniter移动到Laravel 5,遇到了一个我似乎无法找到解决方案的问题。

我知道你可以做路由模型绑定,并且我已经广泛使用它而没有问题,我知道你可以进行方法注入,比如将Request注入到方法中。

但是我的问题"我有多个具有相同名称的类,但对于项目的不同部分,例如:

App\Models\Knowledgebase\Article
App\Models\News\Article
App\Models\Minisite\Resources\Article

如您所见,我有3种不同的Article模型。一个用于知识库文章,一个用于新闻文章,一个用于部门资源文章。

但是,使用路由模型绑定时,似乎我只能将一个模型绑定到关键字,并且由于我的每个网址都有关键字文章,因此它不起作用。

所以我的问题是,是否可以通过将相关模型指定为参数来将其注入方法?或者我需要通过以下方式将其硬编码到方法中:

$article = App\Models\Knowledgebase\Article::find($some_id);

或者我可以这样做:

public function show(App\Models\Knowledgebase\Article $article)
{
   // code
}

目前,如果我尝试注入文章,$article将成为文章模型的新实例,而不是模型记录。框架会让您手动检索每个方法的模型,这似乎有点奇怪。

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

  

但是,使用路由模型绑定时,似乎我只能将一个模型绑定到关键字,并且因为我的每个URL都有关键字Article,所以它实际上不起作用。

您可以在每种类型的绑定中使用不同的关键字。

// in the router
$router->model('kbarticle', 'App\Models\Knowledgebase\Article');
$router->model('newsarticle', 'App\Models\News\Article');
$router->model('sitearticle', 'App\Models\Minisite\Resources\Article');

// in your routes file
Route::get('knowledge/{kbarticle}', function(App\Models\Knowledgebase\Article $article) {});
Route::get('news/{newsarticle}', function(App\Models\News\Article $article) {});
Route::get('site/{sitearticle}', function(App\Models\Minisite\Resources\Article $article) {});

答案 1 :(得分:2)

为什么不直接使用和别名导入类?

<?php
use App\Models\Knowledgebase\Article as MyArticle

然后在你的功能上执行此操作:

public function show(MyArtcile $article)
{
   // code
}