我想创建Auto breadcrumb,因为数组包含带有2个键的子数组(链接,标题)。 像这样:
array (
0 => array (
'link' => 'index',
'title' => 'Home :)',
),
1 => array (
'link' => 'advanced',
'title' => 'Advanced Setting :)'
)
);
当我使用下面的代码时,它会给我这个结果但是我无法获得你在变量$mytitle
上看到的标题。
class Setting extends Controller {
public function __construct() {
$relflection = new ReflectionClass ( get_class ( $this ) );
$methods = $relflection->getMethods ( ReflectionMethod::IS_PUBLIC );
if (is_array ( $methods )) {
foreach ( $methods as $method ) {
if ($method->class == get_class ( $this )) {
$breadcrumb[] = array("link" => $method->name, "title" => "???");
}
}
}
$breadcrumb = $breadcrumb;
}
public function index() {
$mytitle = "Home :)";
}
public function advanced() {
$mytitle = "Advanced Setting :)";
}
}
这里的任何人都可以为我提供正确的解决方案吗?
答案 0 :(得分:0)
我希望自己离你的需求不远,但这可行:
首先将您的痕迹分配给实际属性,否则将无法从构造函数的范围访问:
$this->breadcrumb = $breadcrumb;
然后从this问题,您可以设计一种方法来获取您的函数名称:
function getMyCallerName() {
$array = debug_backtrace();
return $array[1]['function'];
}
// since you call a function to have your function name, the right caller will be the second function in the backtrace
你需要一个函数来从你的面包屑中获取所需的标题:
function getTitleFromLink($link) {
foreach ($this->breadcrumb as $array) {
if ($array['link'] == $link) return $array['title'];
}
}
然后您可以在index()
函数中使用它:
public function index() {
$title = getTitleFromLink(getMyCallerName()); // should be "Home :)"
}
public function advanced() {
$title = getTitleFromLink(getMyCallerName()); // should be "Advanced Setting :)"
}
然后,您可以在索引函数中添加任何您想要的逻辑
请务必将这些功能放入您的班级,否则getTitleFromLink()
将无法使用breadcrumb
属性