yaroslawww / laravel-recently-viewed
4.2.1
2024-05-23 07:12 UTC
Requires
- php: ^8.1
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.25
- orchestra/testbench: ^8.10
- phpunit/phpunit: ^10.3
- psalm/plugin-laravel: ^2.8
- vimeo/psalm: ^5.12
README
添加保存/获取会话中最近查看实体的功能
您可以跟踪任意数量的实体。每个列表将单独保存。
会话存储(不持久化)
例如
"recently_viewed" => array:2 [ "App\Models\Product" => array:2 [ 0 => 'a3cda131-e599-4802-84ea-a3dddc19fa8c' 1 => '4413b636-9752-43b3-8361-3ef38c27acf9' ] "App\Domain\Property" => array:3 [ 0 => 133 1 => 134 2 => 653 ] ]
安装
您可以通过composer安装此包
composer require think.studio/laravel-recently-viewed
您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="RecentlyViewed\ServiceProvider" --tag="config"
.env中的配置
# Optional RECENTLY_VIEWED_SESSION_PREFIX=recently_viewed
使用示例
<?php use Illuminate\Database\Eloquent\Model; use RecentlyViewed\Models\Contracts\Viewable; use RecentlyViewed\Models\Traits\CanBeViewed; class Product extends Model implements Viewable { // implement interface use CanBeViewed; }
<?php class ProductController extends Controller { public function show(Product $product) { \RecentlyViewed\Facades\RecentlyViewed::add($product); return view('my-view'); } }
<?php class ProductsViewComposer { public function compose(View $view) { $view->with([ 'recentlyViewedProducts' => \RecentlyViewed\Facades\RecentlyViewed::get(Product::class), // or 'recentlyViewedProductsWithoutLast' => \RecentlyViewed\Facades\RecentlyViewed::get(Product::class)->slice(1), ]); // or $view->with([ 'recentlyViewedProductsFiltered' => \RecentlyViewed\Facades\RecentlyViewed::getQuery(Product::class) ?->where('not_display_in_recently_list', false)->get() ??collect([]), ]); } }
添加持久存储
您可以通过向AppServiceProvider或任何其他服务提供者的register()方法中添加以下内容来启用迁移并运行迁移:
\RecentlyViewed\PersistManager::enableMigrations();
php artisan migrate
.env中的配置
RECENTLY_VIEWED_PERSIST_ENABLED=true
use RecentlyViewed\Models\Contracts\Viewer; use RecentlyViewed\Models\Traits\CanView; class User extends Authenticatable implements Viewer { use CanView; // ... }
在登录后添加“merge”方法(如果您想在登录前合并保存的数据和已存储的数据)
class LoginController extends Controller { // ... protected function authenticated(Request $request, $user) { \RecentlyViewed::mergePersistToCurrentSession(); } }