name = $request->get('name'); $this->description = $request->get('description'); $this->generateAlias(); return $this; } public function generateAlias() { $this->url_alias = ucfirst(preg_replace('/[^a-z0-9\-]/', '-', strtolower($this->name))); } /** * @return IAlbumSource */ public function getAlbumSource() { // TODO allow albums to specify different storage locations - e.g. Amazon S3, SFTP/FTP, OpenStack return new LocalFilesystemSource(dirname(__DIR__) . '/storage/app/albums'); } public function photos() { return $this->hasMany(Photo::class); } public function thumbnailUrl($thumbnailName) { $photo = Photo::where('album_id', $this->id)->first(); if (!is_null($photo)) { return $this->getAlbumSource()->getUrlToPhoto($this, $photo, $thumbnailName); } return ''; } public function url() { return sprintf('/%s', urlencode($this->url_alias)); } }