编程语言
首页 > 编程语言> > php-MVC应用程序中的面包屑逻辑

php-MVC应用程序中的面包屑逻辑

作者:互联网

应该在哪里声明面包屑路径(换句话说,用MVC的哪个字母)?到目前为止,我一直在Controllers中声明它,但是最近我开始使用CakePHP,它全部由Views制作,这让我感到惊讶.

解决方法:

我将在这里给出答案,因为对于面包屑应该做和不应该做的事情有很多困惑.

该模型

模型是一个包含业务逻辑的层,该业务逻辑由域对象,数据映射器和服务组成.您可以阅读有关型号here的更多信息.

控制器

记住:胖模型,瘦控制器.您的控制器/方法是通过路由机制访问的.进入控制器后,您想要获取模型对象,执行模型中需要的任何逻辑,将其结果返回到控制器中的变量,然后使用它在视图中显示数据.

面包屑

话虽如此,面包屑需要不同的零件才能工作.让我们考虑一下:

>他们需要当前页面
>他们需要页面列表
>他们(可能)需要添加自定义“ class = current”

分解:

>在我的框架中,当前控制器也是页面名称(登录控制器映射到/ login).因此,我们已经有了当前页面.
>页面列表.

>如果页面的父/子关系直接绑定到数据模型,则在控制器中,从模型中拉出页面列表.因此,如果可以自动生成面包屑,请使用该模型.
>如果您使用的框架允许完全由用户选择创建面包屑,那么您只是在选择手动放入面包屑的内容.无论哪种方式,都可以在控制器中声明面包屑,如果需要从某个地方获取面包屑,请使用模型.

>最后,是“ class = current”.尽管您实际上不应该在视图中包含重要的“逻辑”,但是诸如循环之类的小东西或语句是否很标准.在这里,您将检查面包屑中与当前控制器名称相同的标题(作为变量传递给视图),如果找到,则添加class = current.

代码示例

注意:未经测试

/**
 * So we're in the home controller, and index action
 *
 * @route localhost/home or localhost/home/index
 * (depending on .htaccess, routing mechanism etc)
 */
class Home extends Controller
{
    public function index()
    {
        // Get current class name, so we have the current page
        $class = __CLASS__;

        // Let's say the page heirachy is tied to the model, so get pages for current method, or however you want to implement it
        $pages = $model->getPages($class);

        // So the TEMPLATE handles the breadcrumbs creation, and the controller passes it the data that it needs, retrieved from the model
        // (new Template) is PHP 5.4's constructor dereferencing, also included is some lovely method chaining
        // setBreadcrumbs() would assign variables to the view
        // Render would do just that
        (new Template)->setBreadcrumbs($currentPage, $pages)->render();
    }
}

现在,视图…注意,我使用PHP 5.4,因此可以使用短回声…

<body>
    <?php foreach($breadcrumbs as $b) { ?>
        <li <?=($b['current'])?'class="current"':''?>>
            <a href="<?=$b['page']['url']?>">
                <?=$b['page']['title']?>
            </a>
        </li>
    <?php } ?>
</body>

这就是我要做的.其中一些取决于个人喜好,但是我希望这显示了一种实现方法,并且至少有用.

实际上,我碰到了这个搜索“ php mvc Breadcrumbs”的答案,写出我的大脑确实也帮助我弄清楚了这一点.那谢谢啦!

标签:breadcrumbs,model-view-controller,php
来源: https://codeday.me/bug/20191024/1917328.html