Peter_Yuan_辉

162 经验值

有个问题请教一下:
在laravel 源代码:
vendor/composer/autoload_real.php

require_once __DIR__ . '/autoload_static.php';
            call_user_func(\Composer\Autoload\ComposerStaticInit290bf49d84893e46e6f7e0573b89e863::getInitializer($loader));

vendor/composer/autoload_static.php

public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInit290bf49d84893e46e6f7e0573b89e863::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInit290bf49d84893e46e6f7e0573b89e863::$prefixDirsPsr4;
            $loader->prefixesPsr0 = ComposerStaticInit290bf49d84893e46e6f7e0573b89e863::$prefixesPsr0;
            $loader->classMap = ComposerStaticInit290bf49d84893e46e6f7e0573b89e863::$classMap;

        }, null, ClassLoader::class);
    }

不明白为什么要用call_user_func来调用?是因为返回的是一个闭包么?我能理解的一部分是,因为这个回调的函数名(ComposerAutoloadComposerStaticInit290bf49d84893e46e6f7e0573b89e863)不太确定,所以会需要用到?

想问一下
我在 laravel 查到这里就查不下去了,我想知道这个 download 函数的源码,需要怎么做?我是 phpstorm,comm+B 提示没有使用这个方法

    /**
     * Create a new file download response.
     *
     * @param  \SplFileInfo|string  $file
     * @param  string  $name
     * @param  array  $headers
     * @param  string|null  $disposition
     * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
     */
    public function download($file, $name = null, array $headers = [], $disposition = 'attachment');

可能是ide_helper的配置不对,或者是不对应当前的laravel版本,看看你的composer.json

你先打印一下你的lesson,看能不能从数据库取值,如果不可以,那么就是数据库连接问题了,我猜测是这里有问题了。

看视频的时候了解到可以通过singleton来bind

public function register()    {   

     $this->app->singleton('hash', function () {         

 return new BcryptHasher;        

});   

 }


注册好了之后,我在vendor/laravel/framework/src/Illuminate/Foundation/helpers.php里面dd

if (! function_exists('app')) {   
 /**     * Get the available container instance.    
 *     * @param  string  $make     
* @param  array   $parameters    
 * @return mixed|\Illuminate\Foundation\Application    
 */   
 function app($make = null, $parameters = [])    {       
     if (is_null($make)) {            
      return Container::getInstance();      
     }        
    dd($make);        
    return Container::getInstance()->make($make, $parameters);   

  

然后我在route里面调用

app('hash');


出来的结果是"path.storage",并不是传入的hash,这是什么情况呢?

@Tomoe 主要我是不明白application这个类是怎么来的,然后这个类是怎么变成Container的,其实这个是laravel启动的时候自动加载出来的,并且在application.php里面写了他是怎么完成这个转换的

`

protected function registerBaseBindings()
{
    static::setInstance($this);

    $this->instance('app', $this);

    $this->instance('Illuminate\Container\Container', $this);
}

`
都在说怎么使用,但是并没有说这个是怎么来的,所以我来请教,不过问题已经解决了,谢谢大家。

视频已经看过了,看了好几次,不过还是没有说明清楚这里面之间的关系,例如,comm+B app()的话,那么是去了helpers.php那里,然后就突然说到了container的源码了,这里面是怎么连接的呢?

看了container的源码大概明白是怎么回事了,不过还有一个疑问,我之前是直接从app看源码(comm+B),去了helpers.php,那么是怎么转到container的源码去了呢?是怎么理解应该什么时候去看哪些源码?