Laravel Route模型绑定到Route :: controller()

时间:2015-10-27 06:28:58

标签: php laravel laravel-5

我有以下路线:

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
    'admin' => 'AdminController',
    'site' => 'SiteController'
]);

然后我在SiteController

中获得了以下方法
/**
 * Get site details and pass to view
 *
 * @param Site $site
 * @return mixed
 * @internal param $site_id
 */
public function getDetails( Site $site )
{
    return $site;
}

当我转到网址site.com/site/details/13时,它不会返回网站对象。

我已将$router->model( 'one', 'App\Site' );添加到RouteServiceProvider并且它可以正常运行,但是如果以后我想要添加另一个这样的控制器但是将其用于jobs,并再次使用getDetails方法并传递App\Job对象?它会自动发送App\Site模型。

那么有什么方法可以防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

我对Laravel的有限知识告诉我,你的路径控制器函数中不能有模型/对象作为参数,并且你不需要$router->model( 'one', 'App\Site' );之类的东西来做这件事。

我假设你想做这样的事情:

至于你的路线:

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
    'admin' => 'AdminController',
    'site' => 'SiteController',
    'jobs' => 'JobController',
]);

SiteController

use Illuminate\Http\Request;
use App/Site; //replace with namespace of model    

public function getDetails($id)
{
    //code for fetching the site object, depends on how your structure is, 
    //like $site = App\Site::find($id); etc

    return $site;
}

同样,您的JobController将类似于:

use Illuminate\Http\Request;
use App/Job; //replace with namespace of model    

public function getDetails($id)
{
    //code for fetching the job object, depends on how your structure is, 
    //like $job = App\Job::find($id); etc

    return $job;
}

请看这里:Laravel Docs - Implicit Controllers