2

PHP用のLithiumフレームワークを使用してWebサイトで作業していますが、コントローラーとビューを含む2つのサブディレクトリ(つまり、管理者とブログ用)が必要です。

-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ビューフォルダを自動的に使用するように設定する方法がわからないことです。

4

1 に答える 1

2

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;

});
于 2012-11-18T19:19:35.657 に答える