Ajouter un fichier associé

Principes

Novius OS fournit la classe Attachment pour gérer les fichiers associés.

Les fichiers associés sont stockés dans le répertoire local/data/files/.

Généralement les fichiers sont associés à un Model mais il est possible de les gérer comme bon vous semble. Pour définir un Attachment il suffit de fournir une configuration.

<?php

$attachment = \Nos\Attachment::forge('my_id', array(
        'dir' => 'apps'.DS.'myapps',
));

Dans l’exemple ci-dessus, notre fichier associé sera enregistré dans le répertoire local/data/files/apps/myapps/my_id/.

Pour enregistrer un fichier, il suffira de faire :

$attachment->set($_FILES['file']['tmp_name'], $_FILES['file']['name']);
$attachment->save();

Dans cet exemple, nous enregistrons un fichier uploadé comme fichier associé. Le chemin du fichier sera alors local/data/files/apps/myapps/my_id/nom_original.extnom_original.ext est le nom original du fichier uploadé, récupéré via $_FILES['file']['name'].

Attaché à un model

Dans le cas d’un fichier attaché à un Model, c’est encore plus simple. Dans la définition de votre classe, il suffit de déclarer :

class Model_Example extends \Nos\Orm\Model
{

        protected static $_attachment = array(
                'avatar' => array(),
                'cv' => array(),
        );

De cette façon, chaque item de Model_Example aura 2 fichiers associés : avatar et cv.

$item = Model_Example::find('first');
$item->avatar->set($_FILES['file']['tmp_name'], $_FILES['file']['name']);
$item->avatar->save();

Utilisation avancée

Pour plus de détails, consultez la documentation d’API d’Attachment.

Extensions

A la création de votre Attachment, vous pouvez spécifier une liste d’extensions de fichier autorisées en ajoutant la clé extensions au tableau de configuration et en lui donnant un tableau d’extensions acceptées en valeur.

Si votre fichier doit être une image, une clé image à true suffira.

Alias pour l’URL

Par défaut, votre fichier attaché sera disponible à l’URL du type :

http://www.mondomaine.com/data/files/dir/id/file_name.extension

Si dir est égal, comme souvent, à apps/mon-apps/mon-type-de-fichier/, celà peut faire une URL assez longue.

Définissez une clé alias dans le tableau de configuration de votre Attachment. La valeur de alias, remplacera celle de dir dans l’URL.

Fichier attaché sécurisé

Si votre fichier attaché ne doit pas être accessible à n’importe qui, vous pouvez le sécuriser. Il suffit de définir, toujours dans le tableau de configuration, une clé check de type fonction de callback. A chaque fois que le fichier sera demandé, via son URL, le système exécutera cette fonction, en lui passant l’objet Attachment en paramètre, pour vérifier si la personne connectée a le droit d’y accéder.

Exemple :

class Verification
{
        public static function check($attachment)
        {
                return isset($_SESSION['user_connected']) && $_SESSION['user_connected'];
        }
}

$attachment = \Nos\Attachment::forge('my_id', array(
        'dir' => 'apps'.DS.'myapps',
        'check' => array('Verification', 'check'),
));

De cette façon, si l’internaute est connecté, donc dans notre cas la variable de session user_connected est à true, il recevra le fichier. S’il ne l’est pas, il recevra une erreur 404.