【问题标题】:Lithium Views in Sub-directories子目录中的锂视图
【发布时间】:2012-11-18 17:01:44
【问题描述】:

我正在使用适用于 PHP 的 Lithium 框架开发一个网站,我的控制器和视图需要有两个子目录(即管理员和博客):

-controllers
  -admin
    HomeController.php
    ...
  -blog
    HomeController.php
    ...
  HomeController.php
  ...

-views
  -admin
    -home
      index.html.php
      ...
    ...
  -blog
    -home
      index.html.php
      ...
    ...
  -layouts
    default.html.php
    admin.html.php
    blog.html.php

到目前为止,我已经发现了允许使用Dispach::config()方法在控制器中使用子域的方法:

Dispatcher::config(array('rules' => array(
  'admin' => array('controller' => 'app\controllers\admin\{:controller}Controller'),
  'blog' => array('controller' => 'app\controllers\blog\{:controller}Controller'),
)));

这在您使用以下路由时有效:

$options = array('continue' => true);

Router::connect('/admin', array(
  'admin' => true,
  'controller' => 'Home'
), $options);

Router::connect('/admin/{:args}', array(
  'admin' => true
), $options);

Router::connect('/blog', array(
  'blog' => true,
  'controller' => 'Home'
), $options);

Router::connect('/blog/{:args}', array(
  'blog' => true
), $options);

现在我遇到的问题是我不知道如何将其设置为自动使用admin/blog 模板和admin/blog 视图文件夹。

【问题讨论】:

    标签: php lithium


    【解决方案1】:

    借助 Media,您可以覆盖默认模板路径。 上面的过滤器为管理请求设置了不同的路径(在 config/bootstrap/media.php 中)。

    Dispatcher::applyFilter('_callable', function($self, $params, $chain) {
      $next = $chain->next($self, $params, $chain);
    
      if ($params['request']->admin) {
    
        Media::type('default', null, array(
            'view' => 'lithium\template\View',
            'paths' => array(
                'layout' => '{:library}/views/layouts/{:layout}.{:type}.php',
                'template' => '{:library}/views/admin/{:controller}/{:template}.{:type}.php'
            )
        ));
      }
    
    return $next;
    
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 2012-03-06
    相关资源
    最近更新 更多