https://github.com/picobaz/gridview
GridView: A flexible Laravel data grid component for dynamic tables. Supports pagination, filtering, sorting, and exports to CSV/Excel/PDF. Build sleek data displays with ease!
https://github.com/picobaz/gridview
csv-export data-grid excel-export filtering laravel pagination pdf-export php sorting table-widget
Last synced: 23 days ago
JSON representation
GridView: A flexible Laravel data grid component for dynamic tables. Supports pagination, filtering, sorting, and exports to CSV/Excel/PDF. Build sleek data displays with ease!
- Host: GitHub
- URL: https://github.com/picobaz/gridview
- Owner: PicoBaz
- License: mit
- Created: 2025-07-15T10:38:34.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-11-15T10:41:31.000Z (3 months ago)
- Last Synced: 2025-11-15T12:21:59.900Z (3 months ago)
- Topics: csv-export, data-grid, excel-export, filtering, laravel, pagination, pdf-export, php, sorting, table-widget
- Language: PHP
- Homepage:
- Size: 37.1 KB
- Stars: 9
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# ๐ฏ GridView
### *The Ultimate Data Grid Package for Laravel*
[](https://packagist.org/packages/picobaz/gridview)
[](https://packagist.org/packages/picobaz/gridview)
[](https://packagist.org/packages/picobaz/gridview)
[](https://packagist.org/packages/picobaz/gridview)
[](https://laravel.com)
**Build powerful, flexible, and beautiful data tables in Laravel with ease!**
[Installation](#-installation) โข [Quick Start](#-quick-start) โข [Features](#-features) โข [Documentation](#-documentation) โข [Examples](#-examples) โข [Support](#-support)
---
## ๐ Why GridView?
GridView transforms your boring data tables into **powerful, interactive data grids** with just a few lines of code. Whether you're building an admin panel, a dashboard, or any data-intensive application, GridView has got you covered!
### โจ Key Highlights
- ๐ **Lightning Fast** - Optimized for performance with large datasets
- ๐จ **Beautiful UI** - Modern, responsive design out of the box
- ๐ **Advanced Filtering** - Search and filter with ease
- ๐ **Smart Sorting** - Multi-column sorting support
- ๐ค **Export Anywhere** - CSV, Excel, and PDF exports
- โ๏ธ **Inline Editing** - Edit data without leaving the table
- โ๏ธ **Bulk Actions** - Perform actions on multiple rows at once
- ๐ฏ **Highly Customizable** - Style it your way
- ๐ฑ **Responsive** - Looks great on all devices
- ๐ **Secure** - Built with security best practices
---
## ๐ฆ Installation
Install via Composer:
```bash
composer require picobaz/gridview
```
### Publish Assets (Optional)
```bash
# Publish configuration
php artisan vendor:publish --tag=gridview-config
# Publish views (for customization)
php artisan vendor:publish --tag=gridview-views
# Publish JavaScript/CSS assets
php artisan vendor:publish --tag=gridview-assets
```
---
## ๐ Quick Start
### Step 1: Create a Search Model
Generate a search model for your data:
```bash
php artisan make:gridview-search UserSearch
```
This creates `app/SearchModel/UserSearch.php`:
```php
function ($query, $value) {
return $query->where('name', 'LIKE', "%{$value}%");
},
'email' => function ($query, $value) {
return $query->where('email', 'LIKE', "%{$value}%");
},
'status' => function ($query, $value) {
return $query->where('status', $value);
},
];
}
}
```
### Step 2: Controller Setup
```php
use App\Models\User;
use App\SearchModel\UserSearch;
public function index()
{
$users = User::query();
$searchModel = new UserSearch();
$dataProvider = $searchModel->search($users);
return view('users.index', compact('searchModel', 'dataProvider'));
}
```
### Step 3: Blade View
```php
{!! gridview([
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'export' => true,
'columns' => [
// Serial number column
['class' => \Picobaz\GridView\SerialColumns::class],
// Bulk action checkbox
[
'class' => \Picobaz\GridView\BulkActionColumn::class,
'checkboxOptions' => [
'name' => 'selection[]',
'class' => 'gridview-checkbox'
]
],
// Regular columns
[
'label' => 'Name',
'attribute' => 'name',
'sortable' => true,
],
[
'label' => 'Email',
'attribute' => 'email',
'sortable' => true,
],
// Inline editable column
[
'label' => 'Status',
'attribute' => 'status',
'editable' => true,
'editableType' => 'select',
'editableOptions' => [
'source' => [
['value' => 'active', 'text' => 'Active'],
['value' => 'inactive', 'text' => 'Inactive']
]
]
],
// Action buttons
[
'label' => 'Actions',
'value' => function($model) {
return '
Edit
View
';
}
],
]
]) !!}
{{-- Bulk Actions Toolbar --}}
{{-- Add model class for bulk actions --}}
```
**That's it!** ๐ You now have a fully functional data grid with filtering, sorting, pagination, and export capabilities!
---
## ๐ฏ Features
### ๐ Smart Data Table
Create beautiful, responsive data tables with minimal code:
```php
{!! gridview([
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'tableOptions' => ['class' => 'table table-striped'],
'columns' => [...]
]) !!}
```
### ๐ Advanced Filtering
Filter data with custom search rules:
```php
public function searchRules(): array
{
return [
'name' => function ($query, $value) {
return $query->where('name', 'LIKE', "%{$value}%");
},
'category_id' => function ($query, $value) {
return $query->whereHas('category', function ($q) use ($value) {
$q->where('id', $value);
});
},
'price_range' => function ($query, $value) {
[$min, $max] = explode('-', $value);
return $query->whereBetween('price', [$min, $max]);
},
];
}
```
### ๐ Multi-Column Sorting
```php
[
'label' => 'Name',
'attribute' => 'name',
'sortable' => true,
]
```
### ๐ค Export to Multiple Formats
Export your data to CSV, Excel, or PDF:
```php
{!! gridview([
'export' => true,
'exportColumns' => [
'Name' => 'name',
'Email' => 'email',
'Status' => 'status',
]
]) !!}
```
### โ๏ธ Inline Editing (NEW! ๐ฅ)
Edit data directly in the table without navigating away:
```php
[
'label' => 'Title',
'attribute' => 'title',
'editable' => true,
'editableType' => 'text', // text, number, email, date, select, textarea
'editableUrl' => route('gridview.inline.update'),
]
```
**Select dropdown example:**
```php
[
'label' => 'Status',
'attribute' => 'status',
'editable' => true,
'editableType' => 'select',
'editableOptions' => [
'source' => [
['value' => 'pending', 'text' => 'Pending'],
['value' => 'approved', 'text' => 'Approved'],
['value' => 'rejected', 'text' => 'Rejected']
]
]
]
```
### โ๏ธ Bulk Actions (NEW! ๐ฅ)
Perform actions on multiple rows at once:
```php
// Add bulk action column
[
'class' => \Picobaz\GridView\BulkActionColumn::class,
'checkboxOptions' => [
'name' => 'selection[]'
]
]
// Add bulk action buttons
Delete Selected
Activate Selected
```
### ๐จ Custom Column Rendering
```php
[
'label' => 'Avatar',
'value' => function($model) {
return '
';
},
'format' => 'raw'
]
```
### ๐ง Custom Filters
Create custom filter views:
```php
[
'label' => 'Status',
'attribute' => 'status',
'filterView' => 'vendor.gridview.filters.status_filter',
]
```
**Custom filter view:**
```blade
{{-- resources/views/vendor/gridview/filters/status_filter.blade.php --}}
All
Active
Inactive
```
---
## ๐จ Customization
### Styling
Customize table appearance in `config/gridview.php`:
```php
'styles' => [
'table_class' => 'table table-striped table-hover',
'header_class' => 'thead-dark',
'row_class' => 'table-row',
],
```
### Pagination
```php
'pagination' => [
'per_page' => 30,
'per_page_options' => [10, 20, 30, 50, 100],
],
```
### Icons
```php
'icons' => [
'sort_asc' => 'fa fa-sort-up',
'sort_desc' => 'fa fa-sort-down',
'export' => 'fa fa-download',
],
```
---
## ๐ Advanced Examples
### Example 1: E-commerce Products Grid
```php
{!! gridview([
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'export' => true,
'columns' => [
['class' => \Picobaz\GridView\SerialColumns::class],
['class' => \Picobaz\GridView\BulkActionColumn::class],
[
'label' => 'Image',
'value' => function($model) {
return '
';
},
'format' => 'raw',
],
[
'label' => 'Product Name',
'attribute' => 'name',
'sortable' => true,
'editable' => true,
'editableType' => 'text',
],
[
'label' => 'Category',
'attribute' => 'category.name',
'sortable' => true,
],
[
'label' => 'Price',
'attribute' => 'price',
'sortable' => true,
'editable' => true,
'editableType' => 'number',
'value' => function($model) {
return '$' . number_format($model->price, 2);
}
],
[
'label' => 'Stock',
'attribute' => 'stock',
'sortable' => true,
'value' => function($model) {
$class = $model->stock > 10 ? 'success' : ($model->stock > 0 ? 'warning' : 'danger');
return ''.$model->stock.'';
},
'format' => 'raw',
],
[
'label' => 'Status',
'attribute' => 'status',
'editable' => true,
'editableType' => 'select',
'editableOptions' => [
'source' => [
['value' => 'active', 'text' => 'Active'],
['value' => 'inactive', 'text' => 'Inactive'],
['value' => 'draft', 'text' => 'Draft']
]
],
'value' => function($model) {
$badges = [
'active' => 'success',
'inactive' => 'danger',
'draft' => 'secondary'
];
return ''
. ucfirst($model->status) . '';
},
'format' => 'raw',
],
[
'label' => 'Actions',
'value' => function($model) {
return '
';
},
'format' => 'raw',
],
],
'exportColumns' => [
'ID' => 'id',
'Product Name' => 'name',
'Category' => 'category.name',
'Price' => 'price',
'Stock' => 'stock',
'Status' => 'status',
]
]) !!}
```
### Example 2: User Management Grid
```php
{!! gridview([
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'columns' => [
['class' => \Picobaz\GridView\SerialColumns::class],
['class' => \Picobaz\GridView\BulkActionColumn::class],
[
'label' => 'Avatar',
'value' => function($model) {
return '
';
},
'format' => 'raw',
],
[
'label' => 'Name',
'attribute' => 'name',
'sortable' => true,
'editable' => true,
],
[
'label' => 'Email',
'attribute' => 'email',
'sortable' => true,
],
[
'label' => 'Role',
'attribute' => 'role',
'editable' => true,
'editableType' => 'select',
'editableOptions' => [
'source' => [
['value' => 'admin', 'text' => 'Admin'],
['value' => 'user', 'text' => 'User'],
['value' => 'moderator', 'text' => 'Moderator']
]
]
],
[
'label' => 'Joined',
'attribute' => 'created_at',
'sortable' => true,
'value' => function($model) {
return $model->created_at->format('M d, Y');
}
],
]
]) !!}
```
---
## โ๏ธ Configuration
Full configuration options in `config/gridview.php`:
```php
return [
'styles' => [...],
'pagination' => [...],
'export' => [...],
'bulk_actions' => [
'enabled' => true,
'default_actions' => [...]
],
'inline_editing' => [
'enabled' => true,
'auto_save' => true,
],
'search' => [
'debounce_delay' => 300,
'min_characters' => 2,
],
'cache' => [
'enabled' => false,
'ttl' => 3600,
],
];
```
---
## ๐ Security
GridView takes security seriously:
- โ
CSRF protection on all forms
- โ
XSS prevention with proper escaping
- โ
SQL injection prevention via Eloquent
- โ
Fillable attribute checking for inline editing
- โ
Model class validation
### Inline Edit Security
The package validates:
- Model class exists
- Attribute is fillable
- User has permission (implement your own middleware)
---
## ๐งช Testing
```bash
composer test
```
---
## ๐ Requirements
- PHP >= 7.3 | 8.0+
- Laravel >= 8.0 | 9.0 | 10.0 | 11.0 | 12.0
- maatwebsite/excel >= 3.1
---
## ๐ค Contributing
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
### How to Contribute
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
---
## ๐ Changelog
Please see [CHANGELOG.md](CHANGELOG.md) for recent changes.
### v1.3.0 (Latest)
- โจ Added Bulk Actions feature
- โจ Added Inline Editing capability
- ๐ง Improved performance for large datasets
- ๐ Bug fixes and improvements
---
## ๐ฌ Support
Need help? Have questions?
- ๐ง Email: [picobaz3@gmail.com](mailto:picobaz3@gmail.com)
- ๐ฌ Telegram: [@picobaz](https://t.me/picobaz)
- ๐ Issues: [GitHub Issues](https://github.com/PicoBaz/gridview/issues)
- โญ Star us on [GitHub](https://github.com/PicoBaz/gridview)
---
## ๐ License
The MIT License (MIT). Please see [License File](LICENSE) for more information.
---
## ๐ Show Your Support
If you find GridView helpful, please consider:
- โญ Starring the repository on [GitHub](https://github.com/PicoBaz/gridview)
- ๐ฆ Sharing it on social media
- ๐ Writing a blog post about your experience
- ๐ฐ [Sponsoring the project](https://github.com/sponsors/PicoBaz)
---
## ๐ Credits
- **Author**: [PicoBaz](https://github.com/PicoBaz)
- **Contributors**: [All Contributors](https://github.com/PicoBaz/gridview/graphs/contributors)
- Inspired by Yii2 GridView
---
**Made with โค๏ธ by [PicoBaz](https://github.com/PicoBaz)**
[โฌ Back to Top](#-gridview)