CakePHP meioupload, image télécharger dans un dossier différent pour chaque modèle
-
25-10-2019 - |
Question
J'utilise meioupload pour télécharger des images dans CakePHP, j'utilise une table appelée « attachement » pour sauvegarder les informations de l'image téléchargée, c'est la structure de ma table de fixation:
CREATE TABLE IF NOT EXISTS `attachments` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`class` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`foreign_id` bigint(20) unsigned NOT NULL,
`filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`dir` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`mimetype` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`filesize` bigint(20) DEFAULT NULL,
`height` bigint(20) DEFAULT NULL,
`width` bigint(20) DEFAULT NULL,
`description` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Et j'ai actuellement 2 autres tables liées à ce à travers le champ de classe (nom de la table) et foreign_id. Maintenant, ma question est, comment puis-je sauvegarder l'image téléchargée dans un dossier différent pour chaque modèle?
Par exemple: je voudrais sauver mon image de poste dans le dossier « post » et pour sauver mon image de profil dans le dossier « profil »
Mise à jour: dans mon modèle de fixation
public $actsAs = array(
'MeioUpload' => array(
'filename' => array(
'dir' => 'post', #i set the default folder as 'post' at the moment
'create_directory' => true,
'allowed_mime' => array(
'image/jpeg',
'image/pjpeg',
'image/png'
),
'allowed_ext' => array(
'.jpg',
'.jpeg',
'.png'
),
'thumbsizes' => array(
'large' => array(
'width' => 500,
'height' => 500
),
'small' => array(
'width' => 100,
'height' => 100
)
)
)
)
);
Mise à jour # 2 : Disons que j'ai actuellement 3 tables, "l'attachement" "post" et "profil", celui qui actAs meioupload est "attachement", chaque fois que je télécharger une image par « post » ou « profil », je vais enregistrer les informations d'image dans « l'attachement », foreign_id et champs de classe dans « pièce jointe » est une connexion « attachement » à « post » et « profil ».
Mise à jour # 3: J'ai suivi la suggestion Dunhamzzz sur l'utilisation du comportement à la volée, et venir avec cette solution, et cela fonctionne
.$this->Attachment->Behaviors->attach(
'MeioUpload', array(
'filename' => array(
'dir' => 'avatars'
)
));
Merci
La solution
La réponse est dans votre MeioUpload, plus précisément l'option « dir », vous pouvez mettre {ModelName}
ou {fieldName}
pour modifier où le fichier est enregistré. Voici la valeur par défaut dans le comportement lui-même:
dir' => 'uploads{DS}{ModelName}{DS}{fieldName}',
Mise à jour
Afin d'obtenir MeioUpload pour soutenir différents paramètres pour le même modèle, vous pouvez essayer fixation le comportement sur le mouche, ce qui vous permet de modifier les paramètres que vous s'il vous plaît.
par exemple dans vos messages actions
$this->Attachment->Behaviours->attach('MeioUpload', array('dir' => '/uploads/posts/');
Assurez-vous de lire la partie sur les comportements sur les docs, il nous l'espérons vous aider à trouver une solution sur une base par action, par opposition à par modèle qui est livré avec des comportements.
Autres conseils
Voici un exemple pour le tableau de actAs $.
'MeioUpload' => array(
'filename' => array(
'dir' => 'files/banners',
'create_directory' => false,
'allowed_mime' => array(
'image/jpeg',
'image/pjpeg',
'image/gif',
'image/png'
),
'allowed_ext' => array(
'.jpg',
'.jpeg',
'.png',
'.gif'
),
)
),
comme vous pouvez le voir, il y a une clé « dir » que vous pouvez modifier