<?php namespace App\Http\Requests; use App\Storage; use Illuminate\Foundation\Http\FormRequest; class StoreStorageRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $result = []; switch ($this->method()) { case 'POST': $result = [ 'name' => 'required|unique:storages|max:255', 'source' => 'required|max:255', ]; switch ($this->get('source')) { case 'AmazonS3Source': $result['auth_url'] = 'sometimes|url'; $result['access_key'] = 'sometimes|required'; $result['secret_key'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; break; case 'LocalFilesystemSource': $result['location'] = 'sometimes|required|is_dir|dir_empty|is_writeable'; break; case 'OpenStackSource': $result['auth_url'] = 'sometimes|required'; $result['tenant_name'] = 'sometimes|required'; $result['username'] = 'sometimes|required'; $result['password'] = 'sometimes|required'; $result['service_name'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; $result['cdn_url'] = 'sometimes|url'; break; case 'RackspaceSource': $result['username'] = 'sometimes|required'; $result['password'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; break; } break; case 'PATCH': case 'PUT': $storageId = intval($this->segment(3)); $storage = Storage::find($storageId); $result = [ 'name' => 'required|max:255|unique:storages,name,' . $storageId ]; switch ($storage->source) { case 'AmazonS3Source': $result['auth_url'] = 'sometimes|url'; $result['access_key'] = 'sometimes|required'; $result['secret_key'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; break; case 'OpenStackSource': $result['auth_url'] = 'sometimes|required'; $result['tenant_name'] = 'sometimes|required'; $result['username'] = 'sometimes|required'; $result['password'] = 'sometimes|required'; $result['service_name'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; $result['cdn_url'] = 'sometimes|url'; break; case 'RackspaceSource': $result['username'] = 'sometimes|required'; $result['password'] = 'sometimes|required'; $result['service_region'] = 'sometimes|required'; $result['container_name'] = 'sometimes|required'; break; } break; } return $result; } }