CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

23 April, 2021

Laravel Relationship Events

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

 

Laravel Relationship Events

Laravel Relationship Events is a package by Viacheslav Ostrovskiy that adds extra model relationship events. This package comes with the following traits that are used to register listeners on a model’s boot() method:

  • HasOneEvents
  • HasBelongsToEvents
  • HasManyEvents
  • HasBelongsToManyEvents
  • HasMorphOneEvents
  • HasMorphToEvents
  • HasMorphManyEvents
  • HasMorphToManyEvents
  • HasMorphedByManyEvents

And from the above traits, here’s an example of a few events on a Country model that has many Users using the HasManyEvents trait:

namespace App\Models;

use App\User;
use Chelout\RelationshipEvents\Concerns\HasManyEvents;
use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
use HasManyEvents;

protected $fillable = [
'name',
];

public function users()
{
return $this->hasMany(User::class);
}

public static function boot()
{
parent::boot();

static::hasManySaving(function ($parent, $related) {
Log::info("Saving user's country {$parent->name}.");
});

static::hasManySaved(function ($parent, $related) {
Log::info("User's country is now set to {$parent->name}.");
});
}
}

And the inverse of the relationship with this package might look like the following:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Chelout\RelationshipEvents\Concerns\HasBelongsToEvents;

class User extends Model
{
use HasBelongsToEvents;

/**
* Get the country associated with the user.
*/
public function country()
{
return $this->belongsTo(Country::class);
}

protected static function boot()
{
parent::boot();

static::belongsToAssociating(function ($relation, $related, $parent) {
Log::info("Associating country {$parent->name} with user.");
});

static::belongsToAssociated(function ($relation, $related, $parent) {
Log::info("User has been assosiated with country {$parent->name}.");
});
}
}

Using an overloaded associate() method, you can fire two events belongsToAssociating and belongsToAssociated:

$country = App\Models\Country::first();

$user = factory(User::class)->create([
'name' => 'John Smith',
]);

// Assosiate user with country
// This will fire belongsToAssociating and belongsToAssociated events
$user->country()->associate($country);

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Laravel Enum Package

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

 

Laravel Enum Package

Laravel Enum is a package by Ben Sampson that adds support for creating enums in PHP and includes a generator for Laravel. Here’s an example of what an Enum class looks like using this package:

<?php

namespace App\Enums;

use BenSampo\Enum\Enum;

final class UserType extends Enum
{
const Administrator = 0;
const Moderator = 1;
const Subscriber = 2;
const SuperAdministrator = 3;
}

Check out the readme for a list of methods and other examples of how to use this package.

One of my favorite features I noticed from the readme is controller validation using a supplied EnumValue rule:

<?php

public function store(Request $request)
{
$this->validate($request, [
'user_type' => ['required', new EnumValue(UserType::class)],
]);
}

You can also validate on the keys using the EnumKey rule:

<?php

public function store(Request $request)
{
$this->validate($request, [
'user_type' => ['required', new EnumKey(UserType::class)],
]);
}

Another Laravel-specific feature that you might find useful is localization:

<?php

// resources/lang/en/enums.php

use App\Enums\UserType;

return [

'user-type' => [
UserType::Administrator => 'Administrator',
UserType::SuperAdministrator => 'Super administrator',
],

];

// resources/lang/es/enums.php
use App\Enums\UserType;

return [

'user-type' => [
UserType::Administrator => 'Administrador',
UserType::SuperAdministrator => 'Súper administrador',
],

];
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

LaRecipe: Documentation with Markdown in Your Laravel Projects

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

 

LaRecipe: Documentation with Markdown in Your Laravel Projects

LaRecipe is a code-driven package created by Saleem Hadad that provides an easy way to create beautiful documentation for your product or application inside your Laravel app using Markdown.

To get started in your project, you need to install it via composer and run the setup command to publish the necessary assets and configuration:

php artisan larecipe:install

Out of the box, LaRecipe put’s your documentation at the /docs URL, and you can version control your documentation alongside your application. The folder structure of a typical installation looks like this:

├─ config
│ └─ larecipe.php
└─ resources
└─ docs
│─ 1.0
│ │─ index.md
│ └─ overview.md
└─ 2.0
│─ index.md
└─ overview.md

The above example would have routes to /docs/1.0 and /docs/2.0. You can customize the base route, path to the documentation files, and the landing page. For example, configuring the landing configuration option to overview would map to overview.md.

You can also configure the default version, and control published versions of the documentation:

return [
'versions' => [
'default' => '1.0',
'published' => [
'1.0'
]
]
];

LaRecipe includes other configurations that you can learn about in the documentation and from the PHP configuration file.

LaRecipe converts your markdown documents into HTML, with optional Vue component support. You can read about Vue component support in the documentation. Out of the box, it includes Vue components for Cards, Buttons, Badges, and Progress.

You can get started with LaRecipe by reading through the LaRecipe documentation. The source code is also available at saleem-hadad/larecipe on GitHub.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Laratables Ajax support of DataTables in Laravel

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

Laratables Ajax support of DataTables in Laravel


Laratables is a package by Gaurav Makhecha to handle server-side AJAX of DataTables (Table plug-in for jQuery) in Laravel +5.5:

This package helps with simple requirements of displaying data from eloquent models into data tables with ajax support. Plus, using simple relationships and customizing column values.

With this package the client-side code looks similar to any other usage of the Datatables plugin for jQuery:

$('#users-table').DataTable({
serverSide: true,
ajax: "{{ route('admin.users.datatables') }}",
columns: [
{ name: 'id' },
{ name: 'name' },
{ name: 'email' },
{ name: 'role.name' },
{ name: 'action', orderable: false, searchable: false }
],
...
});

Note role.name in the columns property, which is a relationship column on the User model with the name of the relationship and the field.

On the server-side, here’s what a data tables controller might look like to provide the data:

use App\User;
use Freshbitsweb\Laratables\Laratables;
...
return Laratables::recordsOf(User::class);

Customizing columns and the query is possible, and this package does so via model methods. I am not one that likes a ton of extra methods on my models to support third-party packages, so perhaps a trait would be an option to contain the overrides on a model for this specific package. Check the readme for full customization options.

Laratables has an online demo available, and you can check out the source code/installation instructions from the GitHub – freshbitsweb/laratables repository.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Luhn Algorithm Package for Laravel

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

Luhn Algorithm Package for Laravel


Laravel Luhn is a package by Vincent Prat that provides utilities to ease validation and computation of credit cards, SIREN codes, and other use-cases for the Luhn algorithm.

The Luhn algorithm (Wikipedia), developed in the 1950’s by IBM scientist Hans Peter Luhn, is a “simple checksum formula used to validate a variety of identification numbers.” Such numbers range from credit card numbers to various types of government identification numbers such as NPI numbers issued to health care providers.

Using the Laravel Luhn package, you can validate numbers using the package’s validation rule:

<?php

$validator = Validator::make($data, [
'number1' => 'luhn', // Using shorthand notation
'number2' => new LuhnRule(), // Using custom rule class
]);

The Luhn algorithm implementation using the provided facade includes three methods, including isValid(), computeCheckDigit(), and computeCheckSum():

<?php

Luhn::isValid('1234');
Luhn::computeCheckDigit('1234');
Luhn::computeCheckSum('1234');

Check out marvinlabs/laravel-luhn on GitHub for complete installation and usage instructions. If you are interested in learning more about the Luhn algorithm, the Luhn algorithm page on Wikipedia has some good information, even including some code examples of how the algorithm works.


Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Laravel View Models

 Programing Coderfunda     April 23, 2021     Packages, php     No comments   

 

Laravel View Models


The Laravel View Models by Brent Roose of Spatie is a package that can move the work you might do in a controller to a “view model”:

Have you ever made a controller where you had to do a lot of work to prepare variables to be passed to a view? You can move that kind of work to a so-called view model. In essence, view models are simple classes that take some data and transform it into something usable for the view.

A view model class is designed to house the complex logic of your views and clean up view-related logic from controllers:

class PostViewModel extends ViewModel
{
public $indexUrl = null;

public function __construct(User $user, Post $post = null)
{
$this->user = $user;
$this->post = $post;

$this->indexUrl = action([PostsController::class, 'index']);
}

public function post(): Post
{
return $this->post ?? new Post();
}

public function categories(): Collection
{
return Category::canBeUsedBy($this->user)->get();
}
}

The above view model class gets created in the controller:

class PostsController
{
public function create()
{
$viewModel = new PostViewModel(
current_user()
);

return view('blog.form', $viewModel);
}

public function edit(Post $post)
{
$viewModel = new PostViewModel(
current_user(),
$post
);

return view('blog.form', $viewModel);
}
}

And together, the view model and the controller provide your view with the following abilities:

<input type="text" value="{{ $post->title }}" />
<input type="text" value="{{ $post->body }}" />

<select>
@foreach ($categories as $category)
<option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
</select>

<a href="{{ $indexUrl }}">Back</a>

All public methods and properties in a view model are automatically exposed to the view.

I think this package is an excellent abstraction of this logic, and instead of passing the view model to the view, you can return a view directly like this:

class PostsController
{
public function update(Request $request, Post $post)
{
// …

return (new PostViewModel($post))->view('post.form');
}
}

And last but not least, you can expose functions which require extra parameters:

class PostViewModel extends ViewModel
{
public function formatDate(Carbon $date): string
{
return $date->format('Y-m-d');
}
}

Which you can then reference in your template:

{{ $formatDate($post->created_at) }}

Thanks to Brent Roose and the folks at Spatie for this excellent package! You can access the code and installation instructions from the GitHub repository spatie/laravel-view-models.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Newer Posts Older Posts Home

Meta

Popular Posts

  • Sitaare Zameen Par Full Movie Review
     Here’s a  complete Vue.js tutorial for beginners to master level , structured in a progressive and simple way. It covers all essential topi...
  • Tailwindcss best practices for responsive design
    Tailwind CSS provides powerful utilities for responsive design out of the box. To use it effectively and maintain clean, scalable code, here...
  • Crawl and Index Your Website with Laravel Site Search
      Laravel Site Search   is a package by Spatie to create a full-text search index by crawling your site. You can think of it as a private Go...
  • Tailwind CSS Tutorial (Beginner to Master)
    Here's a simple and complete Tailwind CSS tutorial designed for students and beginners , progressing step-by-step from beginner to mast...
  • Is there a way to write a JavaScript program that enables you to Search Words in Multiple PDF Files?
    I need to create a simple program/system/application using JavaScript that enables a user to search a certain word in multiple scanned PDF f...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda