This is an example on how to use boot methods in Nova Resources, similar to Eloquent Models.
In this case, I am rendering markdown to html before saving the model to the database (using Parsedown).
<?php | |
namespace App\Providers; | |
use Laravel\Nova\Nova; | |
use Laravel\Nova\Cards\Help; | |
use Illuminate\Support\Facades\Gate; | |
use Laravel\Nova\NovaApplicationServiceProvider; | |
class NovaServiceProvider extends NovaApplicationServiceProvider | |
{ | |
/** | |
* Bootstrap any application services. | |
* | |
* @return void | |
*/ | |
public function boot() | |
{ | |
parent::boot(); | |
Nova::serving(function () { | |
$this->bootResources(); | |
}); | |
} | |
/** | |
* Register the Nova routes. | |
* | |
* @return void | |
*/ | |
protected function routes() | |
{ | |
Nova::routes() | |
->withAuthenticationRoutes() | |
->withPasswordResetRoutes() | |
->register(); | |
} | |
/** | |
* Register the Nova gate. | |
* | |
* This gate determines who can access Nova in non-local environments. | |
* | |
* @return void | |
*/ | |
protected function gate() | |
{ | |
Gate::define('viewNova', function ($user) { | |
return in_array($user->email, [ | |
// | |
]); | |
}); | |
} | |
/** | |
* Get the cards that should be displayed on the default Nova dashboard. | |
* | |
* @return array | |
*/ | |
protected function cards() | |
{ | |
return [ | |
new Help, | |
]; | |
} | |
/** | |
* Get the extra dashboards that should be displayed on the Nova dashboard. | |
* | |
* @return array | |
*/ | |
protected function dashboards() | |
{ | |
return []; | |
} | |
/** | |
* Get the tools that should be listed in the Nova sidebar. | |
* | |
* @return array | |
*/ | |
public function tools() | |
{ | |
return []; | |
} | |
/** | |
* Register any application services. | |
* | |
* @return void | |
*/ | |
public function register() | |
{ | |
// | |
} | |
/** | |
* Boot resources. | |
* | |
* @return void | |
*/ | |
protected function bootResources() | |
{ | |
foreach (Nova::$resources as $resource) { | |
if (!method_exists($resource, 'boot')) | |
continue; | |
$resource::boot(); | |
} | |
} | |
} |
<?php | |
namespace App\Nova; | |
use Illuminate\Http\Request; | |
use Parsedown; | |
use Laravel\Nova\Fields\ID; | |
use Laravel\Nova\Fields\Markdown; | |
use Laravel\Nova\Fields\Text; | |
use \App\Post as PostModel; | |
class Post extends Resource | |
{ | |
/** | |
* The model the resource corresponds to. | |
* | |
* @var string | |
*/ | |
public static $model = PostModel::class; | |
/** | |
* The single value that should be used to represent the resource when being displayed. | |
* | |
* @var string | |
*/ | |
public static $title = 'title'; | |
/** | |
* The columns that should be searched. | |
* | |
* @var array | |
*/ | |
public static $search = [ | |
'title', 'text_markdown', | |
]; | |
/** | |
* Boot the resource. | |
* | |
* @return void | |
*/ | |
public static function boot() | |
{ | |
PostModel::saving(function ($post) { | |
$post->text_html = (new Parsedown)->text($post->text_markdown); | |
}); | |
} | |
/** | |
* Get the fields displayed by the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function fields(Request $request) | |
{ | |
return [ | |
ID::make()->sortable(), | |
Text::make('Title')->sortable(), | |
Markdown::make('Text', 'text_markdown')->stacked(), | |
]; | |
} | |
/** | |
* Get the cards available for the request. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function cards(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the filters available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function filters(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the lenses available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function lenses(Request $request) | |
{ | |
return []; | |
} | |
/** | |
* Get the actions available for the resource. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @return array | |
*/ | |
public function actions(Request $request) | |
{ | |
return []; | |
} | |
} |
Nice! This might come in handy some day...