CakePHP распространенные модели - PullRequest
1 голос
/ 21 декабря 2010

У меня 3-4 приложения, запущенные из одной библиотеки Cake, каждое приложение имеет свои контроллеры, модели и представления.

Недавно я обнаружил, что довольно много методов в моделях перекрываются между проектами, мне было интересно, можно ли заставить модели приложений (не app_model.php) расширять модели в файлах тортов

, например

app1
    controllers
    models
        model_1.php
        model_2.php
    views
app2
    controllers
    models
        model_1.php
        model_3.php
    views
cake
    controllers
    models
        model_1.php
    views

Надеюсь, это имеет смысл

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

Вы не должны изменять ваши приложения CakePHP для чтения кода из другого приложения CakePHP.Весь код вашего приложения должен быть инкапсулирован в это приложение.

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

Ознакомьтесь с документацией CakePHP для создания плагинов .

Плагин будет иметь свои собственные контроллеры, модели, представление и теперь (начиная с CakePHP 1.3) этособственные активы (CSS, Js, изображения и т. д.).Вы можете добавить плагин в свое приложение и изменить маршрут и ссылки, чтобы конечный пользователь не заметил разницы в вашем приложении.

Router::connect('/your/routes/*', array('plugin' => 'your_plugin', 'controller' => 'controller_in_plugin'));

echo $this->Html->link('Your Link', array('plugin' => 'your_plugin', 'controller' => 'controller_in_plugin', 'action' => 'action_in_plugins_controller'));
0 голосов
/ 21 декабря 2010

Вы можете попробовать использовать символическую ссылку для распространенных моделей.Таким образом, несмотря на то, что в каталогах находится несколько файлов, все они используют одну и ту же корневую реализацию.

0 голосов
/ 22 декабря 2010

Как уже упоминалось в RabidFire, сначала необходимо указать дополнительный путь к модели. Затем для наследования от такой модели необходимо импортировать соответствующую модель в файл с дочерней моделью:

App::import('Model', 'ParentModel');

class ChildModel extends ParentModel {
    ...
}
0 голосов
/ 21 декабря 2010

Если вы используете CakePHP 1.3, вы можете изменить свой файл bootstrap.php:

App::build(array(
    ...
    'models' =>  array('/var/www/app1/models/', '/var/www/cake/models/'),
    ...
));

Но я думаю, что вам придется переименовывать их по-другому, то есть у вас не может быть model_1.PHP в обоих местах.Но у вас может быть vehicle.php в вашей папке cake / models, car.php в вашей папке cars_app / models & bike.php в папке bikes_app / models с моделями, расширяющими модель Vehicle.

У меня нет 'Я проверил это, но попробуй!

...