Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Virgin:在控制器中注入一个模型作为依赖项_Php_Laravel 5_Dependency Injection_Refactoring_Legacy Code - Fatal编程技术网

Php Laravel Virgin:在控制器中注入一个模型作为依赖项

Php Laravel Virgin:在控制器中注入一个模型作为依赖项,php,laravel-5,dependency-injection,refactoring,legacy-code,Php,Laravel 5,Dependency Injection,Refactoring,Legacy Code,在我在模型中继承的代码中有一些重要的逻辑,我想使用Laravel的依赖项注入,以便将模型作为依赖项加载到控制器中,而不是使用Laravel提供的外观 下面是一个示例控制器: namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show the profile for

在我在模型中继承的代码中有一些重要的逻辑,我想使用Laravel的依赖项注入,以便将模型作为依赖项加载到控制器中,而不是使用Laravel提供的外观

下面是一个示例控制器:

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;
user App\Models\User

class UserController extends Controller
{

     /**
     * @var User
     */
     private $user=null;

     public function __construct(User $user)
     {
       $this->user=$user;
     }


    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => $this->user->findOrFail($id)]);
    }
}

但是,我不想使用Facade
User
,而是希望能够将其作为依赖项加载到控制器中:

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;
user App\Models\User

class UserController extends Controller
{

     /**
     * @var User
     */
     private $user=null;

     public function __construct(User $user)
     {
       $this->user=$user;
     }


    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return View
     */
    public function show($id)
    {
        return view('user.profile', ['user' => $this->user->findOrFail($id)]);
    }
}

我之所以想这样做,是因为我来自Symfony的背景,在那里依赖注入模式被严重破坏。此外,依赖项注入是单元测试的最佳伙伴,因此我希望能够统一我熟悉的依赖项注入


因此,我想知道是否可以在控制器中存在逻辑的地方注入模型,而不是使用laravel提供的Facade模式。

注册路由时,可以使用模型绑定:

// routes/web.php
Route::get('users/{user}', 'UserController@show');
然后在控制器中,您可以将方法更改为:

public function show(User $user)
{
    //
}
其中,
$user
将是具有正确id的
App\user
实例。例如,如果url是
/users/1
,则
$user
将包含id为
1
App\user

有关更多信息: