Skip to content

Commit 67f29bf

Browse files
authored
Merge pull request #4542 from Laravel-Backpack/singleton-view-namespaces
Update Backpack to work with Octane.
2 parents 234b63e + 2eb8915 commit 67f29bf

File tree

9 files changed

+40
-32
lines changed

9 files changed

+40
-32
lines changed

src/BackpackServiceProvider.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,12 @@ public function register()
6161
include_once __DIR__.'/macros.php';
6262

6363
// Bind the CrudPanel object to Laravel's service container
64-
$this->app->singleton('crud', function ($app) {
65-
return new CrudPanel($app);
64+
$this->app->scoped('crud', function ($app) {
65+
return new CrudPanel();
66+
});
67+
68+
$this->app->singleton('BackpackViewNamespaces', function ($app) {
69+
return new ViewNamespaces();
6670
});
6771

6872
// Bind the widgets collection object to Laravel's service container
@@ -279,6 +283,6 @@ public function loadHelpers()
279283
*/
280284
public function provides()
281285
{
282-
return ['crud', 'widgets'];
286+
return ['crud', 'widgets', 'BackpackViewNamespaces'];
283287
}
284288
}
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
11
<?php
22

3-
namespace Backpack\CRUD\app\Library\CrudPanel\Traits;
3+
namespace Backpack\CRUD;
44

5-
trait HasViewNamespaces
5+
class ViewNamespaces
66
{
7-
private $viewNamespaces = [];
7+
private static $viewNamespaces = [];
88

99
/**
1010
* Return all the view namespaces including the ones stored in the laravel config files.
1111
*
1212
* @param string $domain (eg. fields, filters, buttons)
1313
* @return array
1414
*/
15-
public function getViewNamespacesFor(string $domain)
15+
public static function getFor(string $domain)
1616
{
17-
$viewNamespacesFromConfig = $this->getViewNamespacesFromConfigFor($domain);
17+
$viewNamespacesFromConfig = self::getFromConfigFor($domain);
1818

19-
return array_unique(array_merge($viewNamespacesFromConfig, $this->viewNamespaces[$domain] ?? []));
19+
return array_unique(array_merge($viewNamespacesFromConfig, self::getForDomain($domain)));
2020
}
2121

2222
/**
23-
* Adds multiple namespaces to a given domain.
23+
* Add view namespaces for a given domain.
2424
*
2525
* @param string $domain (eg. fields, filters, buttons)
26-
* @param array $viewNamespaces
26+
* @param string|array $viewNamespaces
2727
* @return void
2828
*/
29-
public function addViewNamespacesFor(string $domain, array $viewNamespaces)
29+
public static function addFor(string $domain, $viewNamespaces)
3030
{
3131
foreach ((array) $viewNamespaces as $viewNamespace) {
32-
$this->addViewNamespaceFor($domain, $viewNamespace);
32+
if (! in_array($viewNamespace, self::getForDomain($domain))) {
33+
self::$viewNamespaces[$domain][] = $viewNamespace;
34+
}
3335
}
3436
}
3537

3638
/**
37-
* Add a new view namespace for a given domain.
39+
* Return the namespaces stored for a given domain.
3840
*
39-
* @param string $domain (eg. fields, filters, buttons)
40-
* @param string $viewNamespace
41-
* @return void
41+
* @param string $domain
4242
*/
43-
public function addViewNamespaceFor(string $domain, string $viewNamespace)
43+
private static function getForDomain(string $domain)
4444
{
45-
$this->viewNamespaces[$domain][] = $viewNamespace;
45+
return self::$viewNamespaces[$domain] ?? [];
4646
}
4747

4848
/**
@@ -53,7 +53,7 @@ public function addViewNamespaceFor(string $domain, string $viewNamespace)
5353
* @param mixed $customConfigKey
5454
* @return array
5555
*/
56-
private function getViewNamespacesFromConfigFor(string $domain, $customConfigKey = null)
56+
private static function getFromConfigFor(string $domain, $customConfigKey = null)
5757
{
5858
return config($customConfigKey ?? 'backpack.crud.view_namespaces.'.$domain) ?? [];
5959
}
@@ -66,10 +66,10 @@ private function getViewNamespacesFromConfigFor(string $domain, $customConfigKey
6666
* @param string $viewNamespacesFromConfigKey
6767
* @return array
6868
*/
69-
public function getViewNamespacesWithFallbackFor(string $domain, string $viewNamespacesFromConfigKey)
69+
public static function getWithFallbackFor(string $domain, string $viewNamespacesFromConfigKey)
7070
{
71-
$viewNamespacesFromConfig = $this->getViewNamespacesFromConfigFor($domain, $viewNamespacesFromConfigKey);
71+
$viewNamespacesFromConfig = self::getFromConfigFor($domain, $viewNamespacesFromConfigKey);
7272

73-
return array_unique(array_merge($viewNamespacesFromConfig, $this->getViewNamespacesFor($domain)));
73+
return array_unique(array_merge($viewNamespacesFromConfig, self::getFor($domain)));
7474
}
7575
}

src/app/Library/CrudPanel/CrudButton.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Backpack\CRUD\app\Library\CrudPanel;
44

5+
use Backpack\Crud\ViewNamespaces;
6+
57
/**
68
* Adds fluent syntax to Backpack CRUD Buttons.
79
*
@@ -275,7 +277,7 @@ private function getViewPathsWithFallbacks()
275277
$type = $this->name;
276278
$paths = array_map(function ($item) use ($type) {
277279
return $item.'.'.$type;
278-
}, $this->crud()->getViewNamespacesFor('buttons'));
280+
}, ViewNamespaces::getFor('buttons'));
279281

280282
return array_merge([$this->content], $paths);
281283
}

src/app/Library/CrudPanel/CrudFilter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Backpack\CRUD\app\Library\CrudPanel;
44

55
use Backpack\CRUD\app\Exceptions\BackpackProRequiredException;
6+
use Backpack\Crud\ViewNamespaces;
67
use Closure;
78
use Illuminate\Support\Str;
89
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -28,7 +29,6 @@ public function __construct($options, $values, $logic, $fallbackLogic)
2829
if (! backpack_pro()) {
2930
throw new BackpackProRequiredException('Filter');
3031
}
31-
3232
// if filter exists
3333
if ($this->crud()->hasFilterWhere('name', $options['name'])) {
3434
$properties = get_object_vars($this->crud()->firstFilterWhere('name', $options['name']));
@@ -146,7 +146,7 @@ public function getViewWithNamespace()
146146
public function getNamespacedViewWithFallbacks()
147147
{
148148
$type = $this->type;
149-
$namespaces = $this->crud()->getViewNamespacesFor('filters');
149+
$namespaces = ViewNamespaces::getFor('filters');
150150

151151
if ($this->viewNamespace != 'crud::filters') {
152152
$namespaces = array_merge([$this->viewNamespace], $namespaces);

src/app/Library/CrudPanel/CrudPanel.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use Backpack\CRUD\app\Library\CrudPanel\Traits\FakeFields;
1515
use Backpack\CRUD\app\Library\CrudPanel\Traits\Fields;
1616
use Backpack\CRUD\app\Library\CrudPanel\Traits\Filters;
17-
use Backpack\CRUD\app\Library\CrudPanel\Traits\HasViewNamespaces;
1817
use Backpack\CRUD\app\Library\CrudPanel\Traits\HeadingsAndTitles;
1918
use Backpack\CRUD\app\Library\CrudPanel\Traits\Input;
2019
use Backpack\CRUD\app\Library\CrudPanel\Traits\Macroable;
@@ -39,7 +38,7 @@
3938
class CrudPanel
4039
{
4140
// load all the default CrudPanel features
42-
use Create, Read, Search, Update, Delete, Input, Errors, Reorder, Access, Columns, Fields, Query, Buttons, AutoSet, FakeFields, FakeColumns, AutoFocus, Filters, Tabs, Views, Validation, HeadingsAndTitles, Operations, SaveActions, Settings, Relationships, HasViewNamespaces;
41+
use Create, Read, Search, Update, Delete, Input, Errors, Reorder, Access, Columns, Fields, Query, Buttons, AutoSet, FakeFields, FakeColumns, AutoFocus, Filters, Tabs, Views, Validation, HeadingsAndTitles, Operations, SaveActions, Settings, Relationships;
4342
// allow developers to add their own closures to this object
4443
use Macroable;
4544

src/app/Library/CrudPanel/Traits/Search.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Backpack\CRUD\app\Library\CrudPanel\Traits;
44

5+
use Backpack\CRUD\ViewNamespaces;
56
use Carbon\Carbon;
67
use Validator;
78

@@ -313,7 +314,7 @@ private function getCellViewName($column)
313314
// including the configured view_namespaces
314315
$columnPaths = array_map(function ($item) use ($column) {
315316
return $item.'.'.$column['type'];
316-
}, $this->getViewNamespacesFor('columns'));
317+
}, ViewNamespaces::getFor('columns'));
317318

318319
// but always fall back to the stock 'text' column
319320
// if a view doesn't exist

src/app/Library/CrudPanel/Traits/Views.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Backpack\CRUD\app\Library\CrudPanel\Traits;
44

55
use Backpack\CRUD\app\Exceptions\BackpackProRequiredException;
6+
use Backpack\CRUD\ViewNamespaces;
67

78
trait Views
89
{
@@ -300,7 +301,7 @@ public function getFirstFieldView($viewPath, $viewNamespace = false)
300301
// until you find a view that exists
301302
$paths = array_map(function ($item) use ($viewPath) {
302303
return $item.'.'.$viewPath;
303-
}, $this->getViewNamespacesFor('fields'));
304+
}, ViewNamespaces::getFor('fields'));
304305

305306
foreach ($paths as $path) {
306307
if (view()->exists($path)) {

src/app/Library/Widget.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Backpack\CRUD\app\Library;
44

55
use Backpack\CRUD\app\Exceptions\BackpackProRequiredException;
6+
use Backpack\CRUD\ViewNamespaces;
67
use Illuminate\Support\Fluent;
78

89
/**
@@ -136,7 +137,7 @@ public function getFinalViewPath()
136137
$type = $this->type;
137138
$paths = array_map(function ($item) use ($type) {
138139
return $item.'.'.$type;
139-
}, app('crud')->getViewNamespacesWithFallbackFor('widgets', 'backpack.base.component_view_namespaces.widgets'));
140+
}, ViewNamespaces::getWithFallbackFor('widgets', 'backpack.base.component_view_namespaces.widgets'));
140141

141142
foreach ($paths as $path) {
142143
if (view()->exists($path)) {

src/resources/views/crud/show.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
// including the configured view_namespaces
6262
$columnPaths = array_map(function($item) use ($column) {
6363
return $item.'.'.$column['type'];
64-
}, $crud->getViewNamespacesFor('columns'));
64+
}, \Backpack\CRUD\ViewNamespaces::getFor('columns'));
6565
6666
// but always fall back to the stock 'text' column
6767
// if a view doesn't exist

0 commit comments

Comments
 (0)