Created
August 6, 2019 17:04
-
-
Save codebykyle/8b31c770f78f2af4bcf53d171fdc0515 to your computer and use it in GitHub Desktop.
Laravel Nova Split Resource Field Functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Nova; | |
use Illuminate\Http\Request; | |
use Laravel\Nova\Fields\Heading; | |
use Laravel\Nova\Fields\ID; | |
use Laravel\Nova\Resource as NovaResource; | |
use Laravel\Nova\Http\Requests\NovaRequest; | |
abstract class Resource extends NovaResource | |
{ | |
/** | |
* Get the fields displayed by the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function fields(Request $request) | |
{ | |
return $this->processAllFields($request); | |
} | |
/** | |
* Get system fields for this resource | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsSystem(Request $request) { | |
return [ | |
Heading::make('System Information')->onlyOnDetail(), | |
ID::make()->onlyOnDetail(), | |
]; | |
} | |
/** | |
* Manually controlled fields for this resource | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function defaultFields(Request $request) { | |
return []; | |
} | |
/** | |
* Fields which are available on the create and edit form by default | |
* This can be overwrote by using fieldsCreate and fieldsUpdate if you want | |
* to control specific forms | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsForm(Request $request) { | |
return []; | |
} | |
/** | |
* Fields available on the default index view | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsIndex(Request $request) { | |
return []; | |
} | |
/** | |
* Fields to display when viewing the resource | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsDisplay(Request $request) { | |
return []; | |
} | |
/** | |
* Fields which are available on the create page for this resource | |
* Defaults to fieldsForm | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsCreate(Request $request) { | |
return $this->fieldsForm($request); | |
} | |
/** | |
* Fields which are available on the update page for this resource | |
* Defaults to fieldsForm | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
public function fieldsUpdate(Request $request) { | |
return $this->fieldsForm($request); | |
} | |
/** | |
* Merge and process the available field functions | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processAllFields(Request $request) { | |
return array_merge( | |
$this->processSystemFields($request), | |
$this->processIndexFields($request), | |
$this->processCreateFields($request), | |
$this->processUpdateFields($request), | |
$this->processDisplayFields($request), | |
$this->processDefaultFields($request) | |
); | |
} | |
/** | |
* Process the index fields visibility | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processIndexFields(Request $request) { | |
return collect($this->fieldsIndex($request))->map(function ($field) { | |
if(method_exists($field, 'onlyOnIndex')) { | |
return $field->onlyOnIndex(); | |
} | |
return $field; | |
})->toArray(); | |
} | |
/** | |
* Process the display fields visibility | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processDisplayFields(Request $request) { | |
return collect($this->fieldsDisplay($request))->map(function ($field) { | |
if(method_exists($field, 'onlyOnDetail')) { | |
return $field->onlyOnDetail(); | |
} | |
return $field; | |
})->toArray(); | |
} | |
/** | |
* Process the create fields visibility | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processCreateFields(Request $request) { | |
return collect($this->fieldsCreate($request))->map(function ($field) { | |
if(method_exists($field, 'onlyOnForms')) { | |
return $field->onlyOnForms()->hideWhenUpdating(); | |
} | |
return $field; | |
})->toArray(); | |
} | |
/** | |
* Process the update fields visibility | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processUpdateFields(Request $request) { | |
return collect($this->fieldsUpdate($request))->map(function ($field) { | |
if(method_exists($field, 'onlyOnForms')) { | |
return $field->onlyOnForms()->hideWhenCreating(); | |
} | |
return $field; | |
})->toArray(); | |
} | |
/** | |
* Process manually controlled default fields | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processDefaultFields(Request $request) { | |
return $this->defaultFields($request); | |
} | |
/** | |
* Process system fields | |
* | |
* @param Request $request | |
* @return array | |
*/ | |
protected function processSystemFields(Request $request) { | |
return $this->fieldsSystem($request); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment