Skip to content

Commit 5a83117

Browse files
committed
init
0 parents  commit 5a83117

31 files changed

+10557
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.env
2+
.idea
3+
vendor

.phpunit.result.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":1,"defects":{"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_registers_the_service_provider":8,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_merges_default_config":8,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_has_publishable_groups":7,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_merges_config_via_service_provider":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_without_tags":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_existing_tag":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_string_tag_and_create_it":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_multiple_string_tags":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_all_faqs_without_filtering":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_tag_instance":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_tag_key":8,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_multiple_tag_keys":7},"times":{"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_merges_config_via_service_provider":0,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_registers_the_service_provider":0,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_merges_default_config":0,"Bensondevs\\LaravelFaq\\Tests\\LaravelFaqServiceProviderTest::it_has_publishable_groups":0.003,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_without_tags":0.02,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_existing_tag":0.001,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_string_tag_and_create_it":0.001,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_a_faq_with_multiple_string_tags":0.001,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_all_faqs_without_filtering":0.001,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_tag_instance":0.002,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_tag_key":0.002,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_fetch_faqs_by_multiple_tag_keys":0.002,"Bensondevs\\LaravelFaq\\Tests\\FaqTest::it_can_add_translations_to_a_faq":0.001}}

README.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Laravel FAQ 📚
2+
3+
A simple, flexible, and customizable FAQ management package for Laravel.
4+
Built with tagging, sorting, and localization in mind.
5+
6+
> Developed by [Bensondevs](https://github.com/bensondevs)
7+
8+
---
9+
10+
## 🚀 Features
11+
12+
- Add FAQs with or without tags
13+
- Tag-based filtering
14+
- Multi-lingual question & answer support (via `spatie/laravel-translatable`)
15+
- Sortable (via `spatie/eloquent-sortable`)
16+
- API-ready with Resources
17+
- Easy integration into existing Laravel apps
18+
- Workbench support for local testing
19+
20+
---
21+
22+
## 📦 Installation
23+
24+
Require the package via Composer:
25+
26+
```bash
27+
composer require bensondevs/laravel-faq
28+
```
29+
30+
Publish config & migrations:
31+
32+
```bash
33+
# Publish config file
34+
php artisan vendor:publish --tag=faq-config
35+
36+
# Publish migrations file
37+
php artisan vendor:publish --tag=faq-migrations
38+
```
39+
40+
## ⚙️ Configuration
41+
42+
The default config file `config/faq.php` will be published. You can customize table names and other options there.
43+
44+
## ✅ Usage
45+
46+
#### Add a FAQ (no tag):
47+
48+
```php
49+
use Bensondevs\LaravelFaq\Faq;
50+
51+
$faq = Faq::add('What is Laravel?', 'Laravel is a PHP framework.');
52+
```
53+
54+
#### Add a FAQ with a tag:
55+
56+
```php
57+
$faq = Faq::add(
58+
question: 'What is PHP?',
59+
answer: 'A scripting language.',
60+
locale: 'en',
61+
tag: 'php',
62+
);
63+
```
64+
65+
#### Add with multiple tags:
66+
67+
```php
68+
$faq = Faq::add(
69+
question: 'What is Tailwind?',
70+
answer: 'A CSS framework.',
71+
locale: 'en',
72+
tag: ['css', 'tailwind'],
73+
);
74+
```
75+
76+
#### Retrieve all FAQs:
77+
78+
```php
79+
Faq::all(); // returns FaqResource::collection
80+
```
81+
82+
#### Retrieve by tag key or instance:
83+
84+
```php
85+
use Bensondevs\LaravelFaq\Models\Tag;
86+
87+
Faq::all('php');
88+
Faq::all(Tag::first());
89+
Faq::all(['php', 'laravel']);
90+
```
91+
92+
## 🧪 Testing
93+
94+
This package uses [Orchestra Testbench](https://github.com/orchestral/testbench).
95+
96+
Run all tests:
97+
98+
```bash
99+
./vendor/bin/phpunit
100+
```
101+
102+
## 🎨 Code Style
103+
104+
This package uses Laravel Pint for formatting.
105+
106+
To auto-format your code:
107+
108+
```bash
109+
./vendor/bin/pint
110+
```
111+
112+
## 📄 License
113+
This package is open-sourced software licensed under the [MIT license](https://chatgpt.com/c/LICENSE).
114+
115+
## 🙌 Credits
116+
117+
- [Simeon Bensona](https://github.com/bensondevs)
118+
- [Spatie](https://spatie.be/) for [translatable](https://spatie.be/docs/laravel-translatable/v6/introduction) & [sortable](https://github.com/spatie/eloquent-sortable) packages
119+
- [Laravel](https://www.laravel.com) community

composer.json

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
{
2+
"name": "bensondevs/laravel-faq",
3+
"description": "A simple, flexible, and customizable FAQ management package for Laravel.",
4+
"license": "MIT",
5+
"authors": [
6+
{
7+
"name": "Simeon Bensona",
8+
"email": "[email protected]",
9+
"role": "Developer"
10+
}
11+
],
12+
"homepage": "https://github.com/bensondevs/laravel-faq",
13+
"keywords": [
14+
"Bensondevs",
15+
"Laravel",
16+
"FAQ",
17+
"Knowledge Base"
18+
],
19+
"require": {
20+
"php": ">=8.2",
21+
"spatie/eloquent-sortable": "^4.5",
22+
"spatie/laravel-translatable": "^6.11"
23+
},
24+
"autoload": {
25+
"psr-4": {
26+
"Bensondevs\\LaravelFaq\\": "src"
27+
}
28+
},
29+
"autoload-dev": {
30+
"psr-4": {
31+
"Bensondevs\\LaravelFaq\\Tests\\": "tests/",
32+
"Workbench\\App\\": "workbench/app/",
33+
"Workbench\\Database\\Factories\\": "workbench/database/factories/",
34+
"Workbench\\Database\\Seeders\\": "workbench/database/seeders/"
35+
}
36+
},
37+
"scripts": {
38+
"test": "vendor/bin/phpunit",
39+
"test-coverage": "vendor/bin/phpunit --coverage-html coverage",
40+
"post-autoload-dump": [
41+
"@clear",
42+
"@prepare"
43+
],
44+
"clear": "@php vendor/bin/testbench package:purge-skeleton --ansi",
45+
"prepare": "@php vendor/bin/testbench package:discover --ansi",
46+
"build": "@php vendor/bin/testbench workbench:build --ansi",
47+
"serve": [
48+
"Composer\\Config::disableProcessTimeout",
49+
"@build",
50+
"@php vendor/bin/testbench serve --ansi"
51+
]
52+
},
53+
"config": {
54+
"sort-packages": true,
55+
"allow-plugins": {
56+
"pestphp/pest-plugin": true
57+
}
58+
},
59+
"extra": {
60+
"laravel": {
61+
"providers": [
62+
"Bensondevs\\LaravelFaq\\LaravelFaqServiceProvider"
63+
]
64+
}
65+
},
66+
"require-dev": {
67+
"laravel/pint": "^1.22",
68+
"orchestra/testbench": "^10.4",
69+
"pestphp/pest": "^3.8"
70+
}
71+
}

0 commit comments

Comments
 (0)