Php Laravel调用应用程序操作与直接调用类对象
当我们可以通过像这样创建类的对象直接调用控制器方法时Php Laravel调用应用程序操作与直接调用类对象,php,laravel,performance,security,laravel-routing,Php,Laravel,Performance,Security,Laravel Routing,当我们可以通过像这样创建类的对象直接调用控制器方法时 Route::get( 'url/{parameters}', function() { $controller = new ClassController; return $controller->classMethod($parameters); }); 为什么我们应该使用应用程序和呼叫操作 Route::get( 'url/{parameters}', function() { $controller = app(
Route::get( 'url/{parameters}', function() {
$controller = new ClassController;
return $controller->classMethod($parameters);
});
为什么我们应该使用应用程序和呼叫操作
Route::get( 'url/{parameters}', function() {
$controller = app()->make('ClassController');
return $controller->callAction('classMethod', $parameters);
});
直接调用类对象的调用操作或安全泄露/破坏是否有任何好处?新类控制器和
app()->make('ClassController')
之间的区别在于,当您使用app()->make
时,您正在使用Laravel来“解决”ClassController
的实例
服务容器使解决依赖关系更加方便。例如,如果在使用存储库设计模式时,ClassController
的构造函数具有依赖项,例如ClassRepository
,则可以由容器解析,而无需向其传递新实例,例如newclasscontroller(newclassrepository(new User))
它还使您的代码更易于测试。当您想要测试代码时,您将能够使用控制器或控制器依赖项的一部分
但是,使用newclasscontroller
而不是app()->make('ClassController')
并不会使代码或多或少不安全
在这个阶段,使用->classMethod($parameters)
和->callAction('classMethod',$parameters)
似乎基本上没有区别。从中可以看出,callAction
只是用来调用使用参数传递的方法。我怀疑它可能只是出于兼容性原因而留在代码中,因为在Laravel版本中,callAction
用于做更多的工作
它仍然受到Laravel的路由机制的影响,因此您可能希望在将来callAction
更新时使用它。但是,在这个阶段,这两个函数之间没有区别,除了使用callAction
可以调用控制器上的私有函数和受保护函数
总之,没有任何与安全相关的原因需要您使用app()->make
和callAction
,但是出于可测试性和方便性的原因(对于app()->make
)以及兼容性的原因(对于callAction
),您可能需要使用它们