Skip to content

Commit 9e781c2

Browse files
authored
[11.x] Fix explicit route binding for broadcast routes (#52280)
* Made route parameter in Route Binding optional to allow explicit route binding in broadcast routes * Apply style ci errors
1 parent ed28a45 commit 9e781c2

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/Illuminate/Routing/RouteBinding.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ protected static function createClassBinding($container, $binding)
5858
*/
5959
public static function forModel($container, $class, $callback = null)
6060
{
61-
return function ($value, $route) use ($container, $class, $callback) {
61+
return function ($value, $route = null) use ($container, $class, $callback) {
6262
if (is_null($value)) {
6363
return;
6464
}
@@ -68,7 +68,7 @@ public static function forModel($container, $class, $callback = null)
6868
// throw a not found exception otherwise we will return the instance.
6969
$instance = $container->make($class);
7070

71-
$routeBindingMethod = $route->allowsTrashedBindings() && in_array(SoftDeletes::class, class_uses_recursive($instance))
71+
$routeBindingMethod = $route?->allowsTrashedBindings() && in_array(SoftDeletes::class, class_uses_recursive($instance))
7272
? 'resolveSoftDeletableRouteBinding'
7373
: 'resolveRouteBinding';
7474

tests/Broadcasting/BroadcasterTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Contracts\Routing\BindingRegistrar;
99
use Illuminate\Database\Eloquent\Model;
1010
use Illuminate\Http\Request;
11+
use Illuminate\Routing\RouteBinding;
1112
use Mockery as m;
1213
use PHPUnit\Framework\Attributes\DataProvider;
1314
use PHPUnit\Framework\TestCase;
@@ -84,6 +85,23 @@ public function testCanUseChannelClasses()
8485
$this->assertEquals(['model.1.instance', 'something'], $parameters);
8586
}
8687

88+
public function testModelRouteBinding()
89+
{
90+
$container = new Container;
91+
Container::setInstance($container);
92+
$binder = m::mock(BindingRegistrar::class);
93+
$callback = RouteBinding::forModel($container, BroadcasterTestEloquentModelStub::class);
94+
95+
$binder->shouldReceive('getBindingCallback')->times(2)->with('model')->andReturn($callback);
96+
$container->instance(BindingRegistrar::class, $binder);
97+
$callback = function ($user, $model) {
98+
//
99+
};
100+
$parameters = $this->broadcaster->extractAuthParameters('something.{model}', 'something.1', $callback);
101+
$this->assertEquals(['model.1.instance'], $parameters);
102+
Container::setInstance(new Container);
103+
}
104+
87105
public function testUnknownChannelAuthHandlerTypeThrowsException()
88106
{
89107
$this->expectException(Exception::class);

0 commit comments

Comments
 (0)