Как написать многоразовый код в cakePHP? - PullRequest
0 голосов
/ 01 июля 2010

Может ли кто-нибудь дать мне несколько советов по написанию повторно используемого кода на PHP / CakePHP?

Ответы [ 4 ]

6 голосов
/ 01 июля 2010

[как] написать одну функцию [удалить] в AppController

Хорошо, я укушу. Вы закодируете его почти точно так же, как и на отдельных контроллерах, вам просто нужно заменить части, которые меняются на переменных .

class AppController extends Controller {

    var $components = array('Session');

    function delete($id) {
        $model = $this->modelClass;  // holds the primary model name
        if (!$this->$model->delete($id)) {
            $this->Session->setFlash("Couldn't delete $model record $id.");
        }
        $this->redirect($this->referer());
    }
}

Прочитайте исходный код Cake, чтобы узнать, какие переменные вы можете использовать. Прочитайте больше исходного кода, особенно Компонентов и Поведений, которые по определению можно использовать повторно, чтобы изучить более конкретные методы.

3 голосов
/ 03 июля 2010

Ну, я не думаю, что кто-то упомянул компоненты ... это действительно то, что нужно повторно использовать в CakePHP, по крайней мере, на мой взгляд, контроллер уникален, как и модельи компонент - это место, куда вы помещаете повторно используемый код для вызова контроллерами.

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

IMO, лучше всего всегда пытаться разбить ваши классы на логические функции по мере их создания, а затем беспокоиться только о создании компонента позже, изфункция в классе, что означает, что если вы не уверены, собираетесь ли вы что-то повторно использовать, не тратьте дополнительное время на то, чтобы сначала сделать его компонентом.может быть легко сделано позже (но просто требует немного больше работы / продумывания) ...

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

(еще одна отличная вещь в Cakephp - это то, что внутри папок для модели, контроллера, компонента ... вы можете создавать свои собственные папки и помещать в них файлы, не заботясь о том, где они находятся.До тех пор, пока они находятся в общем правильном каталоге (то есть контроллере, если это контроллер), поэтому, если у вас есть куча контроллеров, которые, скажем, предназначены для выполнения действия, которое вы считаете «обновлением информации профиля пользователя», то выпросто создайте для этого папку и поместите туда все, и вы можете сделать то же самое для компонентов, которые относятся к этому (в каталоге компонентов) ... но когда вы вызываете контроллер в этой папке, вам не нужно ссылатьсяпапка в вызывающем URL-адресе ... что-то, что я нахожу очень удобным, так как это экономит много утомительной работы, позволяя вамчтобы ваши файлы классов были очень организованы)

2 голосов
/ 01 июля 2010

Создайте метод в вашем app_controller.php и используйте его в других контроллерах.

// app/app_controller.php
public function _foo($params){
    // do something
}

// app/controllers/some_controller.php
public function foo($params){
    $this->_foo($params);
    // do something else
}

// app/controllers/other_controller.php
public function foo($params){
    $this->_foo($params);
}
0 голосов
/ 03 июля 2010

Не забывайте о всемогущем плагине. Я понимаю, что это немного противоречит комментариям в основном вопросе. Но конечной формой повторного использования кода в cakephp является плагин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...