如何在 PHP 中实现 MVC 中的自动面包屑?目前一切运行良好,但我注意到代码正在按照我的方法执行,这是我根本不想要的。
private static function getTitle($url, $is_module=FALSE)
{
if ($is_module) {
$prefix = \Config\Config::getPrefixTitle($url);
if (!is_null($prefix)) {
return $prefix;
}
}
$meta_tags = get_meta_tags($url);
if (array_key_exists('breadcrumb_title', $meta_tags)) {
return $meta_tags['breadcrumb_title'];
}
$str = file_get_contents($url);
if (strlen($str) > 0) {
$str = trim(preg_replace('/\s+/', ' ', $str)); // supports line breaks inside <title>
preg_match("/\<title\>(.*)\<\/title\>/i", $str, $title); // ignore case
return $title[1];
}
return NULL;
}
http://localhost.localhost/admin/users/update
我通过某些操作从请求中得到这样一个路径数组:
- http://localhost.localhost/
- http://localhost.localhost/admin/main/
- http://localhost.localhost/admin/users/
- http://localhost.localhost/admin/users/update
在负责页面的控制器中,我进行了分配$this->view->breadcrumb_title = "Сайт";
。这是在视图的基类中实现的:
public function __set($name, $value) {
$this->$name = $value;
}
public function __get($name) {
if ($name == "breadcrumb_title") {
return isset($this->breadcrumb_title) ? $this->breadcrumb_title : $this->title;
}
return isset($this->$name) ? $this->$name : NULL;
}
所以我注意到一个有趣的事情,如果你使用我在开头指出的函数(get_meta_tags / file_get_contents),那么整个页面都会被执行......这不是很好,因为我可以在那里创建一些东西。就个人而言,我注意到在我的函数测试中,他们说标题结果很好,然后创建了我删除的文件......这是因为index
在控制器操作中创建了文件。
问题是:如何避免这种情况,有什么方法?
谢谢你。
我通过让我有机会用手设置标题和面包屑来解决这个问题。这也用于大多数现代框架,所以我决定这样做。由于向页面发出请求,因此无法避免代码执行。理论上,可以尝试在控制器中捕获某些参数并忽略基于它的执行。但这对我来说太烦人了。它也可能不起作用,因为标题是在动作中设置的,并且必须执行。每次,都要用手切开支票——嗯,不。