Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Bible Laravel Package

djunehor/laravel-bible

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require djunehor/laravel-bible
    

    Publish the config file (if needed):

    php artisan vendor:publish --provider="Djunehor\Bible\BibleServiceProvider"
    
  2. First Use Case: Fetch a verse (e.g., Genesis 1:1) in a controller or blade template:

    use Djunehor\Bible\Facades\Bible;
    
    $verse = Bible::getVerse('Genesis', 1, 1);
    return response()->json($verse);
    

    Or in Blade:

    {{ Bible::getVerse('Genesis', 1, 1)->text }}
    
  3. Key Classes:

    • Bible::getVerse($book, $chapter, $verse) – Core method.
    • Bible::getChapter($book, $chapter) – Fetch entire chapter.
    • Bible::getBooks() – List all books in the Bible.

Implementation Patterns

Common Workflows

  1. Fetching Verses in Controllers:

    public function showVerse(Request $request, $book, $chapter, $verse) {
        $verseData = Bible::getVerse($book, $chapter, $verse);
        return view('bible.verse', compact('verseData'));
    }
    
  2. Dynamic Verse Lookup (API/Blade): Use route model binding or form inputs:

    $book = $request->book;
    $chapter = $request->chapter;
    $verse = $request->verse;
    $data = Bible::getVerse($book, $chapter, $verse);
    
  3. Bulk Fetching (Chapters/Books):

    // Fetch entire Psalms 23
    $chapter = Bible::getChapter('Psalms', 23);
    
    // List all books (for dropdowns)
    $books = Bible::getBooks();
    
  4. Integration with Eloquent: Attach verses to models (e.g., Scripture):

    public function store(Request $request) {
        $scripture = new Scripture();
        $scripture->verse = Bible::getVerse($request->book, $request->chapter, $request->verse)->text;
        $scripture->save();
    }
    
  5. Caching Responses: Cache frequent queries (e.g., popular verses):

    $verse = Cache::remember("verse_{$book}_{$chapter}_{$verse}", now()->addHours(1), function() use ($book, $chapter, $verse) {
        return Bible::getVerse($book, $chapter, $verse);
    });
    

Integration Tips

  • Validation: Validate inputs (e.g., book, chapter, verse) using Laravel’s validation rules:
    $validated = $request->validate([
        'book' => 'required|in:' . implode(',', array_keys(Bible::getBooks())),
        'chapter' => 'required|integer|min:1',
        'verse' => 'required|integer|min:1',
    ]);
    
  • Localization: Use the package’s translations (if available) or override them in resources/lang.
  • Testing: Mock the Bible facade in unit tests:
    $this->mock(Bible::class)->shouldReceive('getVerse')->andReturn((object) ['text' => 'Test verse']);
    

Gotchas and Tips

Pitfalls

  1. Case Sensitivity: Book names are case-sensitive (e.g., Genesisgenesis). Use Bible::getBooks() to get the exact names.

  2. Chapter/Verse Limits: Some books (e.g., Psalms, Proverbs) have irregular chapter/verse counts. Validate inputs to avoid errors:

    $maxVerses = Bible::getChapter($book, $chapter)->verses()->count();
    $request->validate(['verse' => "required|integer|max:{$maxVerses}"]);
    
  3. Deprecated Methods: The package is last updated in 2020. Check the source for breaking changes if upgrading Laravel versions.

  4. No Pagination: The package doesn’t support paginating long chapters (e.g., Psalm 119). Handle this manually:

    $verses = collect(Bible::getChapter('Psalms', 119)->verses)->chunk(10);
    

Debugging

  • Empty Responses: Verify inputs match the Bible’s structure (e.g., Revelation has 22 chapters, not 23). Log the full book list for debugging:

    \Log::info('Available books:', ['books' => Bible::getBooks()]);
    
  • Performance: Avoid fetching large chapters repeatedly. Cache or preload data:

    // Preload all books on app startup (if needed)
    app()->booted(function() {
        Cache::remember('all_books', now()->addDays(7), function() {
            return Bible::getBooks();
        });
    });
    

Extension Points

  1. Custom Data Sources: Override the default data source by binding your own Djunehor\Bible\Contracts\BibleRepository:

    $this->app->bind(\Djunehor\Bible\Contracts\BibleRepository::class, function() {
        return new CustomBibleRepository();
    });
    
  2. Add Metadata: Extend the Verse model to include additional fields (e.g., themes, cross-references):

    // In a service provider
    Bible::extend(function($app) {
        $verse = Bible::getVerse('Genesis', 1, 1);
        $verse->theme = 'Creation';
        return $verse;
    });
    
  3. Search Functionality: Implement a search feature by extending the package or using a separate library (e.g., Bible API):

    public function searchVerses($query) {
        $results = [];
        foreach (Bible::getBooks() as $book) {
            $chapter = Bible::getChapter($book, 1);
            foreach ($chapter->verses as $verse) {
                if (stripos($verse->text, $query) !== false) {
                    $results[] = (object) [
                        'book' => $book,
                        'chapter' => 1,
                        'verse' => $verse->number,
                        'text' => $verse->text,
                    ];
                }
            }
        }
        return $results;
    }
    

Configuration Quirks

  • No Config File: The package doesn’t require a config file, but you can publish one to customize behavior (e.g., default translation, data source).
  • Translation Overrides: Override translations in resources/lang/en/bible.php:
    return [
        'books' => [
            'Genesis' => 'Beginning',
            // ...
        ],
    ];
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle