Skip to content

Commit 4cc4f11

Browse files
committed
This adds a new cache key to add the current baseURL to the list of keys. This prevents pagination links from being incorrectly cached on a website which has multiple domains.
1 parent b8ffa34 commit 4cc4f11

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+157
-133
lines changed

src/CacheKey.php

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use GeneaLabs\LaravelModelCaching\Traits\CachePrefixing;
55
use Illuminate\Support\Arr;
66
use Illuminate\Support\Collection;
7+
use Illuminate\Support\Facades\URL;
78
use Illuminate\Support\Str;
89
use Ramsey\Uuid\Uuid;
910

@@ -45,6 +46,7 @@ public function make(
4546
$key .= $this->getOffsetClause();
4647
$key .= $this->getLimitClause();
4748
$key .= $this->getBindingsSlug();
49+
$key .= $this->getPathSlug();
4850
$key .= $keyDifferentiator;
4951
$key .= $this->macroKey;
5052
// dump($key);
@@ -362,4 +364,9 @@ protected function getBindingsSlug() : string
362364

363365
return Arr::query($this->model->query()->getBindings());
364366
}
367+
368+
protected function getPathSlug() : string
369+
{
370+
return ':' . strtolower(URL::to('/'));
371+
}
365372
}

tests/Feature/PaginationTest.php

+17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Feature;
22

3+
use Illuminate\Support\Facades\App;
4+
use Illuminate\Support\Facades\URL;
5+
use Illuminate\Support\Facades\Config;
6+
use Illuminate\Support\Facades\Artisan;
37
use GeneaLabs\LaravelModelCaching\Tests\FeatureTestCase;
48
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
59

@@ -82,4 +86,17 @@ public function testCustomPagination()
8286

8387
$response->see($page2ActiveLink);
8488
}
89+
90+
public function testPaginationUrlIsCorrect() {
91+
$this->baseUrl = 'https://test.local';
92+
93+
$this->visit("pagination-test2?custom-page=2")
94+
->see('https://test.local/pagination-test2?custom-page=1');
95+
96+
$this->baseUrl = 'https://changed.local';
97+
98+
$this->visit("pagination-test2?custom-page=2")
99+
->see('https://changed.local/pagination-test2?custom-page=1');
100+
101+
}
85102
}

tests/Integration/CachedBuilder/BelongsToManyTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public function testLazyLoadingRelationship(): void
2121
->books
2222
->first()
2323
->id;
24-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:stores:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}");
24+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:stores:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}:http://localhost");
2525
$tags = [
2626
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesstore",
2727
];
@@ -52,7 +52,7 @@ public function testInvalidatingCacheWhenAttaching()
5252
->books
5353
->first()
5454
->id;
55-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:stores:genealabslaravelmodelcachingtestsfixturesstore-testing:{$this->testingSqlitePath}testing.sqlite:books-first");
55+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:stores:genealabslaravelmodelcachingtestsfixturesstore-testing:{$this->testingSqlitePath}testing.sqlite:books-first:http://localhost");
5656
$tags = [
5757
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesstore",
5858
];
@@ -85,7 +85,7 @@ public function testInvalidatingCacheWhenDetaching()
8585
->books
8686
->first()
8787
->id;
88-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}");
88+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}:http://localhost");
8989
$tags = [
9090
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesstore",
9191
];
@@ -116,7 +116,7 @@ public function testInvalidatingCacheWhenUpdating()
116116
->books
117117
->first()
118118
->id;
119-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}");
119+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}:http://localhost");
120120
$tags = [
121121
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesstore",
122122
];
@@ -146,7 +146,7 @@ public function testUncachedRelatedModelDoesntCache()
146146
->books
147147
->first()
148148
->id;
149-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}");
149+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:book-store:genealabslaravelmodelcachingcachedbelongstomany-book_store.book_id_=_{$bookId}:http://localhost");
150150
$tags = [
151151
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesuncachedstore",
152152
];

tests/Integration/CachedBuilder/BooleanTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class BooleanTest extends IntegrationTestCase
88
{
99
public function testBooleanWhereCreatesCorrectCacheKey()
1010
{
11-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-is_famous_=_1-authors.deleted_at_null");
11+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-is_famous_=_1-authors.deleted_at_null:http://localhost");
1212
$tags = [
1313
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
1414
];

tests/Integration/CachedBuilder/DateTimeTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class DateTimeTest extends IntegrationTestCase
1111
public function testWhereClauseWorksWithCarbonDate()
1212
{
1313
$dateTime = now()->subYears(10);
14-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-publish_at_>_{$dateTime}");
14+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-publish_at_>_{$dateTime}:http://localhost");
1515
$tags = [
1616
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
1717
];
@@ -38,7 +38,7 @@ public function testWhereClauseWorksWithDateTimeObject()
3838
$dateTime = (new DateTime('@' . time()))
3939
->sub(new DateInterval("P10Y"));
4040
$dateTimeString = $dateTime->format("Y-m-d-H-i-s");
41-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-publish_at_>_{$dateTimeString}");
41+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-publish_at_>_{$dateTimeString}:http://localhost");
4242
$tags = [
4343
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
4444
];

tests/Integration/CachedBuilder/DeleteTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public function testDecrementingInvalidatesCache()
1010
$book = (new Book)
1111
->orderBy("id", "DESC")
1212
->first();
13-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook_orderBy_id_desc-first");
13+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook_orderBy_id_desc:http://localhost-first");
1414
$tags = [
1515
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
1616
];

tests/Integration/CachedBuilder/FindOrFailTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public function testFindOrFailCachesModels()
1111
$author = (new Author)
1212
->findOrFail(1);
1313

14-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-find_1");
14+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null:http://localhost-find_1");
1515
$tags = [
1616
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
1717
];

tests/Integration/CachedBuilder/FindTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function testFindMultipleModelResultsCreatesCache()
2626
{
2727
$authors = (new Author)
2828
->find([1, 2, 3]);
29-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-find_list_1_2_3");
29+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null:http://localhost-find_list_1_2_3");
3030
$tags = [
3131
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
3232
];
@@ -66,7 +66,7 @@ public function testFindWithSingleElementArrayDoesntConflictWithNormalFind()
6666
->find(1);
6767
$author2 = (new Author)
6868
->find([1]);
69-
69+
7070
$this->assertNotEquals($author1, $author2);
7171
$this->assertIsIterable($author2);
7272
$this->assertEquals(Author::class, get_class($author1));

tests/Integration/CachedBuilder/ForceDeleteTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public function testForceDeleteClearsCache()
1717
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
1818
])
1919
->get(sha1(
20-
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-id_=_1-authors.deleted_at_null"
20+
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-id_=_1-authors.deleted_at_null:http://localhost"
2121
))["value"];
2222

2323
(new Author)
@@ -29,7 +29,7 @@ public function testForceDeleteClearsCache()
2929
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
3030
])
3131
->get(sha1(
32-
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-id_=_1"
32+
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-id_=_1:http://localhost"
3333
))["value"]
3434
?? null;
3535

tests/Integration/CachedBuilder/GetTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public function testGetModelResultsCreatesCache()
1111
$authors = (new Author)
1212
->with('books', 'profile')
1313
->get();
14-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-testing:{$this->testingSqlitePath}testing.sqlite:books-testing:{$this->testingSqlitePath}testing.sqlite:profile");
14+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-testing:{$this->testingSqlitePath}testing.sqlite:books-testing:{$this->testingSqlitePath}testing.sqlite:profile:http://localhost");
1515
$tags = [
1616
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
1717
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
@@ -49,7 +49,7 @@ public function testAccessingGetResultsViaArrayIndexDoesNotError()
4949

5050
public function testGetWithFieldArrayCachesResults()
5151
{
52-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor_id_name-authors.deleted_at_null");
52+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor_id_name-authors.deleted_at_null:http://localhost");
5353
$tags = [
5454
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
5555
];
@@ -69,7 +69,7 @@ public function testGetWithFieldArrayCachesResults()
6969

7070
public function testGetWithFieldStringCachesResults()
7171
{
72-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor_id-authors.deleted_at_null");
72+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor_id-authors.deleted_at_null:http://localhost");
7373
$tags = [
7474
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
7575
];

tests/Integration/CachedBuilder/HasManyTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class HasManyTest extends IntegrationTestCase
88
{
99
public function testEagerloadedHasMany()
1010
{
11-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-books.author_id_inraw_1");
11+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-books.author_id_inraw_1:http://localhost");
1212
$tags = [
1313
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
1414
];
@@ -34,7 +34,7 @@ public function testEagerloadedHasMany()
3434

3535
public function testLazyloadedHasMany()
3636
{
37-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-books.author_id_=_1-books.author_id_notnull");
37+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:books:genealabslaravelmodelcachingtestsfixturesbook-books.author_id_=_1-books.author_id_notnull:http://localhost");
3838
$tags = [
3939
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesbook",
4040
];

tests/Integration/CachedBuilder/HasManyThroughTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class HasManyThroughTest extends IntegrationTestCase
88
{
99
public function testEagerloadedHasManyThrough()
1010
{
11-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-testing:{$this->testingSqlitePath}testing.sqlite:printers-first");
11+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-testing:{$this->testingSqlitePath}testing.sqlite:printers:http://localhost-first");
1212
$tags = [
1313
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
1414
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesprinter",
@@ -37,7 +37,7 @@ public function testEagerloadedHasManyThrough()
3737

3838
public function testLazyloadedHasManyThrough()
3939
{
40-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-authors.id_=_1-testing:{$this->testingSqlitePath}testing.sqlite:printers-limit_1");
40+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthor-authors.deleted_at_null-authors.id_=_1:http://localhost-testing:{$this->testingSqlitePath}testing.sqlite:printers-limit_1");
4141
$tags = [
4242
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthor",
4343
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesprinter",

tests/Integration/CachedBuilder/HasOneThroughTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class HasOneThroughTest extends IntegrationTestCase
1010
{
1111
public function testEagerloadedHasOneThrough()
1212
{
13-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:suppliers:genealabslaravelmodelcachingtestsfixturessupplier-testing:{$this->testingSqlitePath}testing.sqlite:history-limit_1");
13+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:suppliers:genealabslaravelmodelcachingtestsfixturessupplier-testing:{$this->testingSqlitePath}testing.sqlite:history-limit_1:http://localhost");
1414
$tags = [
1515
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturessupplier",
1616
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixtureshistory",
@@ -39,7 +39,7 @@ public function testEagerloadedHasOneThrough()
3939

4040
public function testLazyloadedHasOneThrough()
4141
{
42-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:suppliers:genealabslaravelmodelcachingtestsfixturessupplier-testing:{$this->testingSqlitePath}testing.sqlite:history-limit_1");
42+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:suppliers:genealabslaravelmodelcachingtestsfixturessupplier-testing:{$this->testingSqlitePath}testing.sqlite:history-limit_1:http://localhost");
4343
$tags = [
4444
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturessupplier",
4545
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixtureshistory",

0 commit comments

Comments
 (0)