Встраивание CakePHP в существующую страницу - PullRequest
0 голосов
/ 23 октября 2011

Я вызвался создать приложение для БД и сказал этим ребятам, что это будет очень легко, так как я хотел использовать CakePHP. К сожалению, через некоторое время они сказали мне, что хотят это внутри уже существующей сети, которая является древним, сильно настроенным PHPNuke.

Итак, я хочу создать только содержимое одной <div> внутри уже существующей страницы с помощью CakePHP. Я посмотрел в Интернете, но я не нашел то, что искал. Я скорее пользователь фреймворка, а не разработчик, поэтому я мало знаю о бэкенде и о том, как работают фреймворки MVC внутри (и это моя первая попытка с CakePHP, так как я парень из Rails).

То, что я до сих пор делал, это отключение mod_rewrite для Cake. Внутри модуля PHPNuke я включил index.php в Cake и рендеринг представлений с пустой разметкой Это как-то работает, но дело в том, как формировать URL. Я получил это работает сейчас с

http://localhost/modules.php/posts?op=modload&name=xxxxx&file=index&do=xxxxx

но при этом все ссылки на CSS и изображения на сайте PHPNuke не работают.

Есть ли способ использовать что-то вроде

http://localhost/modules.php?op=modload&name=xxxxx&file=index&do=xxxxx&CakePHP=/posts/bla/bla

или каким-либо другим способом, который мог бы сделать работу? Я действительно не хочу ничего менять в существующем приложении PHPNuke.

Большое спасибо

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Итак, подведя итоги, я нашел решение, если кто-то будет искать что-то подобное. Проблема решена с помощью двух пользовательских классов маршрута (http://manual.cakephp.neoboots.com/2.0/en/development/routing.html#custom-route-classes)

class CustomParserRoute extends CakeRoute {
    function parse($url) {
        if (parent::parse($url) != false) //if default parser has the match continue
        {
            // call to Router class to do the routing for new url string again, 
            // if &cakePHP= is in query string, use this, or use default
            if ($_GET['cakePHP']) {
                $params = Router::parse($_GET['cakePHP']);
            } else {
                $params = Router::parse("/my_controller");                
            }            
            return $params;                  
        }
        return false;
    }  

}


class CustomMatcherRoute extends CakeRoute {
    // cusotm mathc function, that generates url string. 
    // If this route matches the url array, url string is generated 
    // with usual way and in the end added to url query used by PHPNuke
    function match($url) {
        $result_url = parent::match($url);  
        if($result_url!= false) {
           $newurl = function_to_generate_custom_query()."&cakePHP=".$result_url;
           return $newurl;
        } else {
            return $result_url;
        }
    }    

}

А потом простая настройка в маршрутах php

App::import('Lib', 'CustomParserRoute'); 
App::import('Lib', 'CustomMatcherRoute');  

// entry point to custom routing, if route starts with modules.php it matches 
// the url and CustomParserRoute::parse class is called
// and route from query string is processed      
Router::connect('/modules.php', array('controller' => 'my_controller'), array('routeClass' => 'CustomParserRoute'));

// actual routes used by cakephp app, usual routes that need to use 
// CustomMatcherRoute classe, so when new url is generated, it is modified 
// to be handled later by route defined above.
Router::connect('/my_controller/:action/*', array('controller' => 'my_controller'), array('routeClass' => 'CustomMatcherRoute'));     
1 голос
/ 23 октября 2011

Что ж, если вы не понимаете, как работает CakePHP, у вас возникнут проблемы с выполнением того, что вы хотите, поскольку это будет означать внесение хаков в основные файлы CakePHP для обхода стандартной маршрутизации.По сути, это означает, что вы будете заново работать над тем, как работает CakePHP, так что вы можете забыть о том, что когда-либо обновитесь до более новой версии CakePHP, и обслуживание будет адом.

Если вы хотите изменить систему, но продолжайтеPHP-Nuke, я бы посоветовал не глушить CakePHP, поскольку это может привести к слишком большому количеству проблем, чтобы можно было предсказать заранее.

Я думаю, что ваши варианты следующие:

  1. Узнайте, как работает PHP-Nuke, чтобы вы могли изменить его
  2. Использовать обычный php для страниц

Любой из них на порядок проще по сравнению с тем, что вы хотели сделать.

...