Skip to content

Instantly share code, notes, and snippets.

@codebykyle
Created August 6, 2019 17:04
Show Gist options
  • Save codebykyle/8b31c770f78f2af4bcf53d171fdc0515 to your computer and use it in GitHub Desktop.
Save codebykyle/8b31c770f78f2af4bcf53d171fdc0515 to your computer and use it in GitHub Desktop.
Laravel Nova Split Resource Field Functions
<?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