如何解决laravel 5中带有make参数的控制器


How to resolve a controller with make parameter in laravel 5?

以前我可以做这样的事情:

/var/www/laravel/app/Http/Controllers/HelloController.php

<?php namespace App'Http'Controllers;
use App'Http'Controllers'Controller;
use App'Models'Hello'Hello as Hello;
class HelloController extends Controller {
    public function index() {
        $o = new Hello;
        $o = new Hello('changed1','changed1');
        var_dump($o);
    }
}

/var/www/laravel/app/Models/Hello

<?php namespace App'Models'Hello;
use Illuminate'Database'Eloquent'Model'Hello.php;

class Hello extends Model
{
    public function __construct($one='default1', $two='default2')
    {
        echo "First  Param: $one","'n<br>'n";
        echo "Second Param: $two","'n<br>'n";
        echo "'n<br>'n";
    }
}

routes.php

Route::get('tutorial', function() {
    $app = app(); 
    $app->make('Hello');
});

在没有make的情况下实例化是可行的,但这现在带来了一个错误:

ReflectionException in Container.php line 776: Class Hello does not exist

你认为我在这里少了什么?

因为类的namespaceApp'Models'Hello,所以在尝试实例化类时必须使用它的namespace。因此,您的代码应该是这样的:

Route::get('tutorial', function() {
    $app = app(); 
    $app->make('App'Models'Hello'Hello');
});

为了在答案中展开一点,您可以删除make()方法调用,只使用app()助手,最终会得到相同的结果:

Route::get('tutorial', function() {
    $app = app(); 
    $app->make('App'Models'Hello'Hello');
    // you can achieve the same with the
    // `app()` helper using less characters :)
    app('App'Models'Hello'Hello');
});