yaroslawww/laravel-recently-viewed

此包已被废弃,不再维护。作者建议使用think.studio/laravel-recently-viewed包代替。

快速实现最近查看功能的包

4.2.1 2024-05-23 07:12 UTC

This package is auto-updated.

Last update: 2024-05-23 07:27:38 UTC


README

Packagist License Packagist Version Total Downloads Build Status Code Coverage Scrutinizer Code Quality

添加保存/获取会话中最近查看实体的功能

您可以跟踪任意数量的实体。每个列表将单独保存。

会话存储(不持久化)

例如

"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();
    }
}

致谢

  • Think Studio