НедоООП от Laravel (часть 2)

Adelf

Administrator
Команда форума
Есть у ларавель фасад Storage для работы с файлами.
Кроме всего у него есть метод url($path) который позволяет получить url файла по его пути. HTTP урл. Т.е. он уже не тем занимается, и неудивительно, что реализация меня искренне порадовала.
PHP:
    /**

     * Get the URL for the file at the given path.
     *
     * @param  string  $path
     * @return string
     */
    public function url($path)
    {
        $adapter = $this->driver->getAdapter();
        if (method_exists($adapter, 'getUrl')) {
            return $adapter->getUrl($path);
        } elseif ($adapter instanceof AwsS3Adapter) {
            return $this->getAwsUrl($adapter, $path);
        } elseif ($adapter instanceof LocalAdapter) {
            return $this->getLocalUrl($path);
        } else {
            throw new RuntimeException('This driver does not support retrieving URLs.');
        }
    }
Настоящая утиная типизация! Есть метод - умеешь. А для VIP персон - попробуем помочь.
 

halva

Новичок
Это какой-то позор
 
Последнее редактирование:

Adelf

Administrator
Команда форума
PHP:
protected function resolve($name)
{
    $config = $this->getConfig($name);

    if (isset($this->customCreators[$config['driver']])) {
        return $this->callCustomCreator($config);
    }

    $driverMethod = 'create'.ucfirst($config['driver']).'Driver';

    if (method_exists($this, $driverMethod)) {
        return $this->{$driverMethod}($config);
    } else {
        throw new InvalidArgumentException("Driver [{$config['driver']}] is not supported.");
    }
}



        
/**
* Create an instance of the local driver.
*
* @param  array  $config
* @return \Illuminate\Contracts\Filesystem\Filesystem
*/
public function createLocalDriver(array $config)
{
    $permissions = isset($config['permissions']) ? $config['permissions'] : [];

    $links = Arr::get($config, 'links') === 'skip'
        ? LocalAdapter::SKIP_LINKS
        : LocalAdapter::DISALLOW_LINKS;

    return $this->adapt($this->createFlysystem(new LocalAdapter(
        $config['root'], LOCK_EX, $links, $permissions
    ), $config));
}

/**
* Create an instance of the ftp driver.
*
* @param  array  $config
* @return \Illuminate\Contracts\Filesystem\Filesystem
*/
public function createFtpDriver(array $config)
{
    $ftpConfig = Arr::only($config, [
        'host', 'username', 'password', 'port', 'root', 'passive', 'ssl', 'timeout',
    ]);

    return $this->adapt($this->createFlysystem(
        new FtpAdapter($ftpConfig), $config
    ));
}

/**
* Create an instance of the Amazon S3 driver.
*
* @param  array  $config
* @return \Illuminate\Contracts\Filesystem\Cloud
*/
public function createS3Driver(array $config)
{
    $s3Config = $this->formatS3Config($config);

    $root = isset($s3Config['root']) ? $s3Config['root'] : null;

    $options = isset($config['options']) ? $config['options'] : [];

    return $this->adapt($this->createFlysystem(
        new S3Adapter(new S3Client($s3Config), $s3Config['bucket'], $root, $options), $config
    ));
}
//... ну тут их много еще
 

A1x

Новичок
ну просто автор когда это писал еще не выучил интерфейсы, бывает
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@Adelf, это не утинная типизация, это стратегия!
Еще автор yii писал, что программисты должны учиться писать код с учетом его ошибок.
 
Сверху