120 votes

Utiliser les CSS dans les vues Laravel ?

Je viens de commencer à apprendre Laravel, et je peux faire les bases d'un contrôleur et du routage.

Mon système d'exploitation est Mac OS X Lion, et il se trouve sur un serveur MAMP.

Mon code de routes.php :

Route::get('/', function() {
    return View::make('home.index');
});

Route::get('businesses', function() {
    return View::make('businesses.index');
});

Route::get('testing', function() {
    return View::make('testing.index');
});        

Route::get('hello', function() {
    return "<h3>Hello world!</H3>";
});

Cela fonctionne, les vues s'affichent parfaitement, ''cependant'' ce que je veux essayer de faire est d'inclure des CSS dans les vues, j'ai essayé d'ajouter un lien vers une feuille de style dans le répertoire mais la page l'a affiché comme la police par défaut du navigateur même si le css était dans le HTML !

Il s'agit de l'index.php des entreprises dans le dossier views :

<head>
   <link rel="stylesheet" type="text/css" href="mystyle.css">
</head>

<p>Business is a varied term. My content here.

J'ai essayé d'utiliser le moteur de modèle Blade dans mon autre dossier de vues (testing) pour afficher le CSS, mais là encore, le CSS ne s'est pas affiché alors qu'il se trouvait dans le dossier testing !

Comment puis-je surmonter ce problème et m'améliorer, car j'apprends lentement à connaître ce cadre.

0 votes

Quelle version de Laravel utilisez-vous ?

7 votes

{{ URL::asset('css/css.css') }}

163voto

montogeek Points 1053

Mettez vos actifs dans le dossier public ; par exemple :

public/css
public/images
public/fonts
public/js

Et ensuite, pour y accéder en utilisant Laravel, utilisez :

{{ HTML::script('js/scrollTo.js'); }}

{{ HTML::style('css/css.css'); }}

Ou :

{{ URL::asset('js/scrollTo.js'); }}

{{ URL::asset('css/css.css'); }} 

Cette syntaxe générera automatiquement le chemin d'accès correct (par exemple, `public/js/scrollTo.js').

0 votes

Etes-vous sûr que les fichiers existent ?

0 votes

Je pense qu'il a des problèmes de .htaccess.

3 votes

N'appelez pas CSS à l'intérieur de @section ou autre, si vous utilisez blade, ça a marché pour moi !

55voto

Mahendra Points 474

Mettez vos actifs dans le dossier public

public/css
public/images
public/fonts
public/js

Et ils l'ont appelé en utilisant Laravel

{{ URL::asset('js/scrollTo.js'); }} // generate path to public directory public/js/scrollTo.js

{{ URL::asset('css/css.css'); }}   // generate  path to public directory public/css/css.css

(OR)

   {{ HTML::script('js/scrollTo.js'); }}

   {{ HTML::style('css/css.css'); }}

42voto

rbtux Points 845

Votre fichier css doit se trouver dans le dossier public ou un sous-dossier de celui-ci.

Par exemple, si vous placez votre css dans le fichier

public/css/common.css

vous utiliseriez

HTML::style('css/common.css');

Dans votre vue de lame...

Ou vous pouvez également utiliser la classe Asset http://laravel.com/docs/views/assets ...

0 votes

Nah, ça ne fait pas de différence. Je ne peux pas accéder à quoi que ce soit via le navigateur contenu dans ces répertoires...

0 votes

@dcolumbus Si le 404 que vous recevez est généré par Laravel (et non par le serveur par défaut), il se peut qu'il manque la ligne suivante dans votre .htaccess (en supposant que vous utilisez Apache) : "RewriteCond %{REQUEST_FILENAME} !-f". Cette ligne doit être placée au-dessus de celle qui contient index.php, et empêchera les requêtes vers des chemins qui existent dans le système de fichiers d'être traitées par le système de routage de Laravel. Si le 404 reçu n'est pas généré par Laravel, vous devez ajouter "AllowOverride All" à votre configuration Apache pour que le .htaccess soit traité (voir la documentation Apache pour plus d'informations).

0 votes

Il a dit qu'il voulait mettre les fichiers css à l'intérieur du dossier view, pas du dossier public, asset() et HTML::style/HTML::script pointent tous vers le répertoire public, laravel ne permet pas à ce qui est à l'intérieur du dossier App d'être accédé par des questions extérieures pour des raisons de sécurité. Donc même s'il y a un index.php ou pas, cela n'a pas d'importance pour ce qu'il veut.

28voto

Diego Castaño Points 116

Vous pouvez également écrire une simple balise de lien comme vous le feriez normalement, puis utiliser l'attr. href :

<link rel="stylesheet" href="<?php echo asset('css/common.css')?>" type="text/css"> 

Bien sûr, vous devez placer votre fichier css dans le répertoire public/css.

0 votes

@dcolumbus 404 peut-être parce que vous donnez un mauvais chemin, essayez d'ajouter le préfixe /public/, laravel a par défaut le préfixe /public/ /public/css/common.css

5voto

Ironwind Points 1255

Ce n'est pas possible bro, Laravel suppose que tout est dans le dossier public.

Donc ma suggestion est :

  1. Allez à la public dossier.
  2. Créez un dossier, de préférence nommé css .
  3. Créez le dossier pour les vues respectives afin d'organiser les choses.
  4. Mettez les css respectifs à l'intérieur de ces dossiers, ce serait plus facile pour vous.

Ou

Si vous tenez vraiment à mettre les css dans le dossier views, vous pouvez essayer de créer Symlink (vous êtes sur Mac donc c'est bon, mais pour Windows, cela ne fonctionnera que pour Vista, Server 2008 ou plus) du répertoire de votre dossier css vers le dossier public et vous pouvez utiliser {{HTML::style('your_view_folder/myStyle.css')}} à l'intérieur de vos fichiers de vue, voici un code pour vous faciliter la tâche, dans le code que vous avez posté, mettez ces éléments avant l'élément return View::make() :

$css_file = 'myStyle.css';
$folder_name = 'your_view_folder';
$view_path = app_path() . '/views/' . $folder_name . '/' . $css_file;
$public_css_path = public_path() . '/' . $folder_name;
if(file_exists($public_css_path)) exec('rm -rf ' . $public_css_path);
exec('mkdir ' . $public_css_path);
exec('ln -s ' . $view_path .' ' . $public_css_path . '/' . $css_file);

Si vous voulez vraiment essayer de réaliser votre idée, essayez ceci :

<link rel="stylesheet" href="<?php echo app_path() . 'views/your_view_folder/myStyle.css'?>" type="text/css">

Mais cela ne fonctionnera pas même si le répertoire du fichier est correct car Laravel ne le fera pas pour des raisons de sécurité, Laravel vous aime tant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X