precisi0nux
V2EX  ›  PHP

关于最佳实践

  •  
  •   precisi0nux · Feb 26, 2016 · 3465 views
    This topic created in 3903 days ago, the information mentioned may be changed or developed.
    需求很简单,从数据库的一个表中抓数据,然后把取得的数据做成导航菜单。每一个页面都需要引用这个菜单,请问我应该把抓数据库的代码放在那里,我想着放到 View ,因为每个页面都会用到它,但这明显不是最佳实践,应该是放在 model 里面。可是放在 model 里面的话难道每个 function 都去执行一边抓数据库的代码,那不是重复代码了吗?抱歉水平不高,表达也不好,希望得到大家的帮助。
    Supplement 1  ·  Feb 28, 2016
    抱歉忘了说框架,是 Laravel 。从评论中看到很多好的想法,打算今天来实践以下。当然有更加 Laravel 的方法也可以指出,谢谢大家。
    9 replies  •  2016-02-28 15:57:08 +08:00
    ershisi
    ershisi
    Feb 26, 2016❤️1
    1
    你不想这样的话,应该是打算把导航数据放在初始化的对象里面?
    opennet
    opennet
    Feb 26, 2016❤️1
    2
    用类继承?
    raincious
    raincious
    Feb 26, 2016❤️1
    3
    你在什么地方初始化那条导航菜单的?

    或许你可以给模板引擎设定一个钩子(如果模板引擎支持的话),在需要调用导航的时候执行这个钩子来进行操作。

    如果上述方法不合适的话,或许你可以做一个 Base Controller ,然后在这个 Base Controller 的__construct 上写好 NavModel 的初始化和与 View 交互的过程,然后让所有需要用到这条导航的 Controller 全都变成这个 Controller 的子类。有点像:

    class BaseController {
    protected $view = null;

    public function __construct() {
    // build a view here or parent::__construct();
    $this->view->assign('Nav', NavModel::getAll());
    }

    }

    class HomePage extends BaseController {
    public function get($request, $respond) {
    $respond->write($this->view->render('Home'))
    }
    }

    但是这样会做出一棵 Controller Three ,控制不好的话或许又是个不好的东西。
    raincious
    raincious
    Feb 26, 2016❤️1
    4
    @raincious 抱歉,是 Tree 不是 Three 。
    jsonline
    jsonline
    Feb 27, 2016 via Android❤️1
    5
    生成文件
    include
    Clarencep
    Clarencep
    Feb 27, 2016❤️1
    6
    这个要看具体框架吧?你用的什么框架? 如果是 Yii 框架就简单了,直接封装个 widget 搞定~
    realpg
    realpg
    Feb 27, 2016❤️1
    7
    我是放在 BASE_CONTROLLER 里的

    需要导航的 Controller extends 这个 BASE CONTROLLER
    不需要导航的去 extends 正常的 Controller 基类
    dawniii
    dawniii
    Feb 28, 2016❤️1
    8
    相信你没看 laravel 的手册

    把数据共享给所有视图
    view()->share('data', [1, 2, 3]);
    precisi0nux
    precisi0nux
    OP
    Feb 28, 2016 via iPhone
    9
    @dawniii 确实,刚从 CI 转过来。好多东西不习惯。谢谢指点。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1558 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:28 · PVG 07:28 · LAX 15:28 · JFK 18:28
    ♥ Do have faith in what you're doing.