Где должны быть размещены «глобальные» функции Symfony?

Как лучше всего разместить функции, которые используются на нескольких уровнях MVC?

Недавно мне пришлось написать несколько статистических функций, которые используются как в представлении, так и в модели. Если я помещаю их в помощник, я застреваю при загрузке помощников на уровне модели, что раздражает, кажется неправильным и полностью ломается, когда эти функции вызываются из задачи (потому что нет контекста по умолчанию). Если я помещаю их в каталог верхнего уровня lib , я застреваю в вызовах типа Stats :: normalPercentile в представлении.

Есть ли другие варианты? Есть ли какие-либо комментарии от разработчиков Symfony о том, где должны быть размещены такие функции?

Edit : По-видимому, нет проблем с выполнением статических вызовов в представлениях. Я сделал вывод, основываясь на том, что Symfony не пишет своих помощников в виде классов (даже после значительного обсуждения .) В таком случае, существуют ли какие-либо соглашения для размещения таких файлов? Просто поместите их в lib / util ?

8
задан Jeremy Kauffman 16 August 2010 в 18:41
поделиться

3 ответа

Что касается вашего редактирования, помощники symfony написаны так, чтобы избежать загромождения представления синтаксисом, который может быть незнаком менее техническим люди, которые обычно имеют дело с небольшим количеством PHP - функций, будучи первоклассными гражданами в «ванильном» PHP. Это философия, взятая из Ruby on Rails, которая вдохновила эту часть фреймворка.

Хранение файлов в lib / - это личное предпочтение, так как symfony на самом деле не возражает, но номенклатура предполагает lib / vendor / yourname .

Если это хороший код, вы можете ревностно охранять его в этой маленькой директории yourname ... если это действительно хороший код, вы можете упаковать его и поделитесь им с другими :)

7
ответ дан 5 December 2019 в 20:11
поделиться

Что не так со статическими вызовами? Я думаю, что это идеально подходит для вспомогательных функций (лучше, чем для функций, поскольку у вас есть своего рода пространство имен).

Довольно странно собирать статистику в представлении.Почему бы вам не сделать это в действии?

Вероятно, правильный ответ зависит от типа проблемы, которую вы пытаетесь решить (вы не объяснили, что именно должны делать ваши помощники). Я обычно использую такие помощники для общих задач, которые не требуют дополнительных классов или вызовов (например, «stripText»).

1
ответ дан 5 December 2019 в 20:11
поделиться

Статистические вычисления не относятся к просмотру. Подумайте о добавлении их на слой модели. lib / util или lib / model мне кажутся подходящими. Например, у вас может быть класс PercentileSequence , который содержит данные, которые можно повторно использовать как в ваших представлениях, так и в задачах, например:

// in your action, component or task
$this->mySequence = new PercentileSequence($data);

// in your view (if PercentileSequence implements Iterator)
<?php foreach ( $mySequence as $rank ): ?>
    <?php echo $rank ?>
<?php endforeach; ?>
// or use plain old array   
<?php foreach ( $mySequence->getRanks() as $rank ): ?>
    <?php echo $rank ?>
<?php endforeach; ?>

Он должен быть таким же внутри задачи.

0
ответ дан 5 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: