Download the PHP package custom-d/laravel-helpers without Composer
On this page you can find all versions of the php package custom-d/laravel-helpers. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package laravel-helpers
Laravel Helpers
Collection of helpers for re-use accross a few of our projects
- Laravel Helpers
- Installation
- Upgrade V2 to V3
- Crud Policy Trait
- Permission naming.
- Crud Access Permission Global Trait \& Scope for Model
- Helpers
- DB Macros
- Null Or Empty
- Case insensitive statments
- Enforced Non Nullable Relations (orFail chain)
- DB Repositories
- Observerable trait (Deprecated)
- Record or Fake HTTP Calls
- Date Manipulation
- Date(Carbon) Helpers attached to above:
- Value Objects
- Larastan Stubs
- Filament Plugin
- Credits
Installation
Install via composer
Upgrade V2 to V3
- ViewAny plicy now checks for a viewAny permission and not list for the viewAny permission check
- Dropped support for php 7.3 & 7.2
- Dropped support for Laravel 6 & 7
- marked execute helper as deprecated
- fixed Model::orWhereNotNullOrEmpty method to do correct query
Crud Policy Trait
By using the CustomD\LaravelHelpers\Models\Policies\CrudPermissions
trait in your model policy alongside Spatie role permissions
you can avoid having to write lots of boilerplate methods in your policy file.
Instead of a Policy like this
it would now look as follows:
and it will automatically check for the following permissions which you would have seeded / set up in Spatie's package.
- users.viewAny
- users.view
- users.create
- users.update
- users.delete
- users.forceDelete
- users.restore
Additionally if using the PermissionBasedAccess
trait on your model, the following extra ones are taken into account
- users.viewOwn (as long as you own the record)
- users.updateOwn
- users.deleteOwn
If the user_id
column is not user_id
, set that in the getOwnerKeyColumn
method documented below in the Crud Access for Model section.
viewAny, create, restore & forceDelete will use the base versions only, and you would need to customise if needed yourself by setting up the permission or policy method to deal with it based on your business logic. Create and viewAny do not have Ownership within a default policy, and the restore / forceDelete are mainly only an administrative functionality.
Permission naming.
The permission naming will by default use a plural of the model name: ie User
becomes users
/ BlogPost
becomes blog_posts
Crud Access Permission Global Trait & Scope for Model
If you use the CustomD\LaravelHelpers\Traits\PermissionBasedAccess
trait on your model it will look for the following Spatie permissions by default:
xxx.view
, xxx.viewOwn
This works as follows:
- if
viewOwn
is true, then it will callscopeCanRetrieveOwnRecord
scope - else if
view
is true, then it will callscopeCanRetrieveAnyRecord
scope - else it will fallback to
scopeCannotRetrieveAnyRecord
scope
To modify the user column, add this to the model.
to call without the scopes: use the withoutPermissionCheck
modifier: eg Model::withoutPermissionCheck()->get()
Helpers
execute - this helper runs an execute action on an action file with dependancy injection on the contructor
If you discover any security related issues, please email instead of using the issue tracker.
String Helpers
isEmail -- usage Str::isEmail('xxx')
or str('xxx')->isEmail()
-- will return boolean.
Array Helpers
pushBefore - will push one or more items before the specified key, or append to the end of the array if the key does not exist: PushAfter will push one or more items after the specified key
Collection Helpers
pushBefore - will push one or more items before the specified key, or append to the end of the array if the key does not exist: PushAfter will push one or more items after the specified key
DB Macros
Null Or Empty
when dealing with some of our legacy databases we have some columns where the entry is either null or empty and these macros allow you to query this without the double entries:
Case insensitive statments
Enforced Non Nullable Relations (orFail chain)
DB Repositories
use of repositories via extending the CustomD\LaravelHelpers\Repository\BaseRepository
abstract
example in the UserRepository.stub.php file
Observerable trait (Deprecated)
adding this trait to your models will automatically look for an observer in the app/Observers folder with the convension {model}Observer as the classname,
you can additionally/optionally add
to add a additional ones if
Replace this with
Record or Fake HTTP Calls
The RecordsOrFakesHttpCalls
trait will allow you to record or fake http calls in your tests. This is useful for testing external api calls without actually calling them.
Add the trait to your PHPUnit test file, ensure the tests/stubs/
directory exists, and then wrap your test code in a callable:
Date Manipulation
You can set user timezones via the following options:
-
optionally create a migration with:
- in user model:
Additionally you can set defaults on the timezone via the attributes method or a setter or even in the migration.
-
in your app config file add the
user_timezone
parameter. - add the UserTimeZone middleware to your api middleware list.
You can now access the current requests timezone via config('request.user.timezone')
Date(Carbon) Helpers attached to above:
methods available:
setUserTimezone(string $timezone) : Static
- sets the users timezone (default set by helper)getUserTimezone() : string
- gets current users timezonesetSystemTimezone(string $timezone) : Static
- sets system timezone (Default app.timezone)getSystemTimezone(): string
- gets teh current timezonetoUsersTimezone(): Static
- returns carbon instance set to users timezonetoSystemTimezone(): Static
- returns carbon instance set to system timezoneusersStartOfDay(): Static
- returns carbon instance set to start of users day (converts to users timezone => start of day => to systemtime)usersEndOfDay(): Static
- users end of dayusersStartOfWeek(): Static
usersEndOfWeek(): Static
usersStartOfMonth(): Static
usersEndOfMonth(): Static
usersStartOfQuarter(): Static
usersEndOfQuarter(): Static
usersStartOfYear(): Static
usersEndOfYear(): Static
parseWithTz(string $time): Static
- parses the time passed using the users timezone unless the timezone is in the timestamphasISOFormat(string $date): bool
- checks if the date is in iso format.
You can also use the CDCarbonDate to create a few different date objects.
Value Objects
Example:
Or using attributes to make advanced objects.
Best practice is to use the make option, which will validate, if you use a public constructor it will not.
These should all be marked as READONLY and FINAL.
The attributes available are:
ChildValueObject(valueobectclass)
- which will make a new valueObjectCollectableValue(valueobjectclass)
- which will convert an array to a coollection of the value objectsMakeableObject(class, [?$spread = false])
- will look for a make method or else construct if passed an non object - if spread is true will expand the array else will pass the array as a single argumentMapToCase(('snake|camel|studly'))
- for the fromRequest method
Mapping Valueobject from your Request would be as easy as doing one of the following:
As we are using final classes, these are immutable, if you need a cloned copy with edited values you can use the put command to create a new value object: eg:
Larastan Stubs
these are temporary only till implemented by larastan
add to your phpstan.neon.dist file
Filament Plugin
this is only if you want to deal with user timezones for display, else will be in UTC in the Filament panel
simply add to your panelProvider
->plugin(UserTimeZonePlugin::make())
Credits
All versions of laravel-helpers with dependencies
illuminate/notifications Version ^9.0|^10.0|^11.0
illuminate/support Version ^9.0|^10|^11.0