messerli90 / laravel-ghost
Fluent Laravel wrapper for the Ghost Content API
Fund package maintenance!
messerli90
Requires
- php: ^7.4|^8.0
- guzzlehttp/guzzle: ^7.0
- illuminate/contracts: ^8.0
- illuminate/http: ^7.0|^8.0
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- brianium/paratest: ^6.0
- nunomaduro/collision: ^5.3
- orchestra/testbench: ^6.15
- phpunit/phpunit: 9.4.3
- spatie/laravel-ray: ^1.17
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-12-07 04:37:04 UTC
README
Laravel wrapper for the Ghost blogging API
A fluent wrapper for the Ghost Content API
Example
$post = Ghost::posts()->with('authors')->fromSlug('welcome'); $tags = Ghost::tags()->all();
Installation
You can install the package via composer:
composer require messerli90/laravel-ghost
You can publish the config file with:
php artisan vendor:publish --provider="Messerli90\Ghost\GhostServiceProvider" --tag="ghost-config"
This is the contents of the published config file:
return [ /** * The API version of your Ghost blog * * Read about Ghost API Versioning in their docs: * https://ghost.org/docs/faq/api-versioning/ */ 'ghost_api_version' => env("GHOST_API_VERSION", 4), /** * Your admin domain can be different to your main domain. * All Ghost(Pro) blogs have a `.ghost.io` domain * as their admin domain and require https. */ 'admin_domain' => env('GHOST_ADMIN_DOMAIN', "https://{admin_domain}"), /** * The Content API URL and key can be obtained by creating a new * Custom Integration under the Integrations screen in Ghost Admin. */ 'key' => env('GHOST_API_KEY', ''), /** * Optionally, cache records when they are returned. */ 'cache' => [ /** * Cache returned records * Set to false if you want to handle caching yourself */ 'cache_records' => false, /** * Prefix key used to save to cache * Ex. ghost_posts */ 'cache_prefix' => 'ghost_', /** * How long until cache expires * Accepts int in seconds, or DateTime instance */ 'ttl' => 60 * 60, ] ];
Usage
// Using the facade Ghost::posts()->all(); // or $ghost = new Ghost($content_key, $domain, string $version); $ghost->posts()->all();
The API for posts
, authors
, tags
, and pages
is similiar and can be used with the following methods:
// All resources returned as an array Ghost::posts()->all(); Ghost::authors()->all(); Ghost::tags()->all(); Ghost::pages()->all(); // Retrieve a single resource by slug Ghost::posts()->bySlug('welcome'); // Retrieve a single resource by id Ghost::posts()->find('605360bbce93e1003bd6ddd6'); // Get full response from Ghost Content API including meta & pagination Ghost::posts()->paginate(); $response = Ghost::posts()->paginate(15); $posts = $response['posts']; $meta = $response['meta'];
Build your request
Ghost::posts() ->with('authors', 'tags') ->fields('title', 'slug', 'html') ->limit(20) ->page(2) ->orderBy('title') ->get();
Caching
It is recommended you cache your returned resources when serving from your Laravel app.
For example, a possible BlogController@index
could look like:
public function index() { $posts = Cache::rememberForever('posts', fn() => Ghost::posts()->with('authors', 'tags')->all() ); return view('blog.index', compact('posts')); }
Automatic Resource Caching (Experimental & not in stable release)
Automatically cache returned records for a defined time.
Includes ghost:cache
artisan command that can be scheduled to periodically repopulate cache with new posts.
Testing
composer test
Roadmap
- Caching
- Ghost Content Filter
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.