php - 允许包中的原生 Laravel “魔术”方法
问题描述
我正在尝试创建一个包裹 View 引擎的包,并允许 Magic 方法与 Laravel 自己的方法链接
你好!
我目前正在开发一个主题包,以允许用户轻松动态地切换主题,因此它应该消除用户自己使用 View() 函数的需要,该包将通过包装来处理它周围。
我目前的问题是;我似乎无法弄清楚如何允许这种情况发生,每当我在环绕它的 Theme 函数上执行我习惯用 View() 执行的常规方法链接时,它都不会通过。
我到底应该如何动态地实现常规的“魔术方法”(例如 withErrors 等),而不必手动将此类每种方法添加到 Theme 包的代码中?
这种对我来说似乎很棘手:(
我的 HomeController 示例,尝试使用 With() 链接方法实现所需的方法链接,同样应该可以使用,比如 - withErrors() 或其他任何东西。
我希望本地 Laravel 的 View() 方法支持的每个链式方法都得到我的包的 Make() 方法的支持。
<?php
namespace App\Http\Controllers\Pages;
use.............;
class HomeController extends Controller
{
/**
* Show the Homepage.
*
* @return \Illuminate\Http\Response
*/
public function show()
{
.............
return app('theme')->make('pages.home')->with(compact('news'));
}
}
不允许我链接与 View() 相同的方法,试图找出一种动态支持它的方法。
解决方案
如果没有主题包的源代码,就无法真正帮助您,但它看起来像这样:
use Illuminate\Support\Traits\ForwardsCalls;
class Theme
{
use ForwardsCalls;
...
public function __call($method, $parameters)
{
return $this->forwardCallTo($this->getView(), $method, $parameters);
}
}
你可以对__callStatic
推荐阅读
- kotlin - 在集成测试的反射信息中不存在的测试中定义的 Kotlin 注释
- ruby-on-rails - 与用户和紧急联系人的关联有什么问题?
- python - 在基线上叠加面积图
- python - PynamoDB:如何更新 MapAttribute 的 ListAttribute 中的属性
- java - 在 RecyclerView 中检测 ItemDecoration 上的点击事件
- javascript - 更新数组项目顺序而不移动它
- python - request.GET.get(),它在 django 中是如何工作的?
- r - write.fasta 函数指定要在循环中写入的目录
- java - 向自定义权限评估器添加其他方法?
- raspberry-pi - 使树莓派上的 MariaDB 10.3 使用 OpenSSL 而不是 yaSSL