PHPackages                             timmcleod/laravel-core-lib - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. timmcleod/laravel-core-lib

AbandonedArchivedLibrary[Framework](/categories/framework)

timmcleod/laravel-core-lib
==========================

A library for Laravel

v3.0.0(5y ago)01.6k1MITPHPPHP &gt;=7.3

Since May 16Pushed 5y ago1 watchersCompare

[ Source](https://github.com/timmcleod/laravel-core-lib)[ Packagist](https://packagist.org/packages/timmcleod/laravel-core-lib)[ RSS](/packages/timmcleod-laravel-core-lib/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (5)Versions (20)Used By (0)

LaravelCoreLib: A Library for Laravel 7.x
=========================================

[](#laravelcorelib-a-library-for-laravel-7x)

1. [Installation](#installation)
2. [Change Trackable Models](#change-trackable-models)
3. [View Models](#view-models)
4. [File Savable Models](#file-savable-models)
5. [ICS Calendar](#ics-calendar)

Installation
------------

[](#installation)

This package requires PHP &gt;= 7.3. Require this package with composer:

```
composer require timmcleod/laravel-core-lib

```

Then, register the following service providers in your app config (`project/config/app.php`) by adding them to the `providers` array:

```
'providers' => [
    TimMcLeod\LaravelCoreLib\Providers\LaravelCoreLibServiceProvider::class,
    TimMcLeod\LaravelCoreLib\Providers\LaravelCoreLibArtisanServiceProvider::class,
]
```

Change Trackable Models
-----------------------

[](#change-trackable-models)

###### Track changes that happen in your Eloquent Models

[](#track-changes-that-happen-in-your-eloquent-models)

The purpose of this trait is to allow us to keep track of changes that are made to attribute values within our eloquent models, so we can access those changes **AFTER** the model is saved.

This can be helpful if we want to log the changes somewhere for later review.

To keep track of changes that are made to the properties/fields of your Eloquent models, just add the `ChangeTrackable` trait to the models you want to track. If you would like to limit which fields are tracked, just add a property called `$trackable` as shown below.

```
use Illuminate\Database\Eloquent\Model;
use TimMcLeod\LaravelCoreLib\Database\Eloquent\ChangeTrackable;

class User extends Model
{
    use ChangeTrackable;

    protected $trackable = ['first_name', 'last_name'];
}
```

When your models are saved, the `ChangeTrackable` trait will automatically keep track of the fields that have changed. The following methods can be used to learn more about those changes:

```
/**
 * Returns true if any of the $trackable attributes have changed. If the
 * $trackable property evaluates as empty, this will return true if
 * any of the attributes' values have changed on the model.
 *
 * @return bool
 */
$model->hasTrackedChanges()

/**
 * Returns a string representation of the attributes that have changed. If a
 * property called $trackable exists on the model, then that $trackable
 * array is used to filter the attributes that should be serialized.
 *
 * If the $trackable property doesn't exist on the model or evaluates as empty,
 * then all of the tracked changes will be serialized without being filtered.
 *
 * @param string $format
 * @param string $delimiter
 * @param string $emptyOld
 * @param string $emptyNew
 * @return string
 */
$model->getTrackedChanges($format = '{attribute}: {old} > {new}', $delimiter = ' | ', $emptyOld = '', $emptyNew = '')

/**
 * Returns an array of the attributes that have changed. If a property called
 * $trackable exists on the model, then the $trackable array will be used
 * to limit or filter the attributes that are returned in the result.
 *
 * If the $trackable property doesn't exist on the model or evaluates as empty,
 * then all of the tracked changes will be returned without being filtered.
 *
 * @return array
 */
$model->getTrackedChangesArray()

/**
 * Returns true if any of the given attributes have changed on the model,
 * regardless of whether or not the $trackable property is defined on
 * the model.
 *
 * @param array $attributes
 * @return bool
 */
$model->hasAnyTrackedChangesFor($attributes = [])

/**
 * Returns a string representation of the attributes that have changed. If the
 * $attributes parameter evaluates as empty, then all tracked changes will
 * be serialized into a string without being filtered.
 *
 * @param array  $attributes
 * @param string $format
 * @param string $delimiter
 * @param string $emptyOld
 * @param string $emptyNew
 * @return string
 */
$model->getTrackedChangesFor($attributes = [], $format = '{attribute}: {old} > {new}', $delimiter = ' | ', $emptyOld = '', $emptyNew = '')

/**
 * Returns an array of the attributes that have changed. If the $attributes
 * parameter evaluates as empty, then all tracked changes are returned.
 *
 * @param array $attributes
 * @return array
 */
$model->getTrackedChangesArrayFor($attributes = [])

/**
 * Returns true if any of the model's attributes have changed, regardless
 * of whether or not the $trackable property is defined on the model.
 *
 * @return bool
 */
$model->hasAnyTrackedChanges()

/**
 * Returns a string representation of ALL of the attributes that have changed
 * on the model, even if the $trackable property does exist on the model.
 *
 * @param string $format
 * @param string $delimiter
 * @param string $emptyOld
 * @param string $emptyNew
 * @return string
 */
$model->getTrackedChangesForAll($format = '{attribute}: {old} > {new}', $delimiter = ' | ', $emptyOld = '', $emptyNew = '')

/**
 * Returns an array of the attributes that have changed. If the $trackable
 * property exists on the model, it's ignored, and all tracked changes
 * are always returned, regardless of whether $trackable exists.
 *
 * @return array
 */
$model->getTrackedChangesArrayForAll()
```

View Models
-----------

[](#view-models)

###### Clean up messy views using View Models

[](#clean-up-messy-views-using-view-models)

This package can be used to help you encapsulate, validate, and manipulate the data that is required by each of the views in your Laravel 5.x applications.

#### Purpose and Overview

[](#purpose-and-overview)

As the views in our applications grow more complex, they tend to require more data that needs to be presented in varying ways. As our view dependencies increase and the view files become more complex, it can be increasingly difficult to keep track of the data that is required by the view.

View Models help by:

- Validating the data that is injected into the view to verify that the data is exactly what the view expects.
- Facilitating the bundling of data with the methods required to manipulate the data in the context of the view.
- Reducing the chance that the "global" variables in your views will be inadvertently overwritten within your views.
- Providing a way to see what data is required by the view at-a-glance.

#### Getting Started

[](#getting-started)

After you have registered the `LaravelCoreLibArtisanServiceProvider`, a new Artisan command will be available to generate your view models. To create a new view model, use the `make:view-model` Artisan command:

```
php artisan make:view-model EditProfileViewModel

```

This command will place a new `EditProfileViewModel` class within your `app/Http/ViewModels` directory. If the directory doesn't exist, it will be created for you.

```
