Jardin trois saisons

Jardin trois saisons

Ce projet de site web Laravel à été réalisé en équipe de 5 contenant 2 artistes et 3 programmeurs.

Le but du projet était de créer un site web fictif pour permettre aux habitants de Saint-Colomban de concevoir leur potager, déterminer quand leur plants devraient être prêts à être cueillit et permettre aux utilisateurs de proposer des échanges. Lorsque l’échange est adéquat entre les usagers, ils peuvent se contacter à partir des informations dans leurs profils et échanger leurs fruits et légumes.

Lors de ce travail d’équipe, j’ai travaillé à la conception de ces éléments backend :

  • Conception des routes nécessaires pour chaque contrôleur.
  • Conception des modèles nécessaires pour chaque éléments de la base de donnée.
  • Conception des migrations.
  • Mise en place de liens entre les différents modèles.
  • Mise en place de la mise en page avec les artistes (Utilisation de blade).

Exemples de code conçus lors de ce projet

Routes utilisées dans le site web.

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('infos.accueilPrincipal');
});

Route::get('/installer', 'AppController@installer');

Route::group(['prefix'=>'informations'],function(){
    Route::get('/', 'VoletInfoController@accueil');
    Route::get('/accueil', 'VoletInfoController@accueilInfo');
    Route::get('/bienfaits', 'VoletInfoController@bienfaits');
    Route::get('/compost', 'VoletInfoController@compost');
    Route::get('/fabrication', 'VoletInfoController@fabrication');
    Route::get('/impacts', 'VoletInfoController@impacts');
    Route::get('/jardins', 'VoletInfoController@jardins');
    Route::get('/outils', 'VoletInfoController@outils');
    Route::get('/plantation', 'VoletInfoController@plantation');
    Route::get('/raisons', 'VoletInfoController@raisons');
});



Route::group(['prefix'=>'users', 'where'=>['user'=>'[0-9]+']],function(){
    Route::get('/', 'UserController@index');
    
    Route::get('/search', 'UserController@search');

    Route::get('/{user}', 'UserController@show');
    
    Route::get('/{user}/edit', 'UserController@edit');
    Route::post('/{user}/edit', 'UserController@update');
    
    Route::get('/create', 'UserController@create');
    Route::post('/create', 'UserController@store');

    Route::get('/{user}/potagers/create', 'UserController@create_potager');
    Route::post('/{user}/potagers/create', 'UserController@store_potager');

    Route::get('/{user}/echanges/create', 'UserController@create_echange');
    Route::post('/{user}/echanges/create', 'UserController@store_echange');

    Route::get('/{user}/favoris', 'UserController@favoris');

    Route::get('/{user}/favoris/create', 'UserController@store_favoris');
    
    Route::get('/{user}/favoris/delete', 'UserController@delete_favoris');

    Route::get('/{user}/delete', "UserController@delete");
    Route::post('/{user}/delete', "UserController@destroy");

    Route::get('/accueil', "UserController@accueil");

    Route::get('/logout', "UserController@logout");
    Route::get('/register', "UserController@register");
    Route::get('/login', "UserController@login");
});

Route::group(['prefix'=>'favorisPotager', 'where'=>['favori'=>'[0-9]+']],function(){

    Route::get('/{favori}/delete', "FavorisPotagerController@delete");
    Route::post('/{favori}/delete', "FavorisPotagerController@destroy");
});

Route::group(['prefix'=>'potagers', 'where'=>['potager'=>'[0-9]+']],function(){

    Route::get('/', 'PotagerController@index');
    
    Route::get('/{potager}', 'PotagerController@show');
    
    Route::get('/{potager}/edit','PotagerController@edit');
    Route::post('/{potager}/edit','PotagerController@update');
    
    Route::get('/{potager}/gestion', 'PotagerController@gestion');
    
    Route::get('/{potager}/espaces/create', 'PotagerController@create_espace');
    Route::post('/{potager}/espaces/create', 'PotagerController@store_espace');
    
    Route::get('/{potager}/delete','PotagerController@delete');
    Route::post('/{potager}/delete','PotagerController@destroy');
    
    Route::get('/{potager}/imagePotager/create', 'PotagerController@create_imagePotager');
    Route::post('/{potager}/imagePotager/create', 'PotagerController@store_imagePotager');
});

Route::group(['prefix'=>'echanges', 'where'=>['echange'=>'[0-9]+']],function(){
    
    // Create dans user

    Route::get('/','EchangeController@index');

    Route::get('/mesEchanges','EchangeController@user_index');

    Route::get('/{echange}/edit','EchangeController@edit');
    Route::post('/{echange}/edit','EchangeController@update');

    Route::get('/{echange}/delete','EchangeController@delete');
    Route::post('/{echange}/delete','EchangeController@destroy');

});

Route::group(['prefix'=>'propositions', 'where'=>['proposition'=>'[0-9]+']],function(){

    Route::get('/mesTransactions','PropositionsEchangeController@user_index');

    Route::get('{echange}/create/echange','PropositionsEchangeController@create_echange');
    Route::post('{echange}/create/echange','PropositionsEchangeController@store_echange');

    Route::get('{echange}/create','PropositionsEchangeController@create');
    Route::post('{echange}/create','PropositionsEchangeController@store');

    Route::get('/{proposition}/delete','PropositionsEchangeController@delete');
    Route::post('/{proposition}/delete','PropositionsEchangeController@destoy');
    
    Route::post('/{proposition}/update','PropositionsEchangeController@update');
});

// section de visionnement
Route::group(['prefix'=>'espaces', 'where'=>['espace'=>'[0-9]+']],function(){

    Route::get('/create', 'EspaceController@create');
    Route::post('/create', 'EspaceController@store');

    Route::post('/{espace}/sections/create', 'EspaceController@store_section');

    Route::get('/{espace}/edit', 'EspaceController@edit');
    Route::post('/{espace}/edit','EspaceController@update');
    
    Route::get('/{espace}/delete', 'EspaceController@delete');
    Route::post('/{espace}/delete', 'EspaceController@destroy');
});

Route::group(['prefix'=>'sections', 'where'=>['section'=>'[0-9]+']],function(){

    Route::get('/{section}/edit', 'SectionController@edit');
    Route::post('/{section}/edit','SectionController@update');

    Route::get('/{section}/delete', 'SectionController@delete');
    Route::post('/{section}/delete', 'SectionController@destroy');

});

// plants de base pour la sectin de gestion
Route::group(['prefix'=>'plantsBase', 'where'=>['plantBase'=>'[0-9]+']],function(){
    Route::get('/', 'PlantBaseController@index');

    Route::get('/{plantBase}', 'PlantBaseController@show');

    Route::get('/create', 'PlantBaseController@create');
    Route::post('/create', 'PlantBaseController@store');

    Route::get('/{plantBase}/edit','PlantBaseController@edit');
    Route::post('/{plantBase}/edit','PlantBaseController@update');
    
    Route::get('/{plantBase}/delete','PlantBaseController@delete');
    Route::post('/{plantBase}/delete','PlantBaseController@destroy');
});

Route::group(['prefix'=>'imagePotager', 'where'=>['imagePotager'=>'[0-9]+']],function(){
    Route::get('/{imagePotager}/edit','ImagePotagerController@edit');
    Route::post('/{imagePotager}/edit','ImagePotagerController@update');

    Route::get('/{imagePotager}/delete','ImagePotagerController@delete');
    Route::post('/{imagePotager}/delete','ImagePotagerController@destroy');
});
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Liens entre les différents éléments de la base de donnée.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Potager extends Model
{
    protected $fillable = [
        'user_id',
    ];

    public function user(){
        return $this->belongsTo('App\User');
    }

    public function espaces(){
        return $this->hasMany('App\Espace');
    }

    public function images(){
        return $this->hasMany('App\ImagePotager');
    }

    public function plants(){
        return $this->hasMany('App\Plant');
    }
}

Création d’un utilisateur.

@extends('interface.index')

@include('interface.header_elisa')

@section('contenu')
    <form action="{{action('UserController@create', $user)}}" method="post">
        @include('users.form', ['user'=>$user])
    </form>
@endsection

// Form -> users.form

{{csrf_field()}}
<div class="donnee">
    {{Form::label('nom', 'Nom')}}
    {{Form::text('nom', $user->nom)}}
</div>
<div class="donnee">
    {{Form::label('prenom', 'Prenom')}}
    {{Form::text('prenom', $user->prenom)}}
</div>
<div class="donnee">
    {{Form::label('email', 'Email')}}
    {{Form::text('email', $user->email)}}
</div>
<div class="donnee">
    <!-- {/{Form::label('password', 'Mot de passe')}} -->
    {{Form::hidden('password', $user->password)}}
</div>
<div class="donnee">
    {{Form::label('photo', 'Photo')}}
    {{Form::text('photo', $user->photo)}}
</div>
<div class="donnee">
    {{Form::label('bio', 'Bio')}}
    {{Form::textarea('bio', $user->bio)}}
</div>
<div class="donnee">
    {{Form::label('no_porte', 'Numéro de porte')}}
    {{Form::text('no_porte', $user->no_porte)}}
</div>
<div class="donnee">
    {{Form::label('rue', 'Rue')}}
    {{Form::text('rue', $user->rue)}}
</div>
<div class="donnee">
    {{Form::label('experience', 'Experience')}}
    {{Form::number('experience', $user->experience, ['min'=>0, 'step'=>'0.1'])}}
</div>
<div class="donnee">
    {{Form::label('est_actif', 'Actif pour la saison')}}
    {{Form::radio('est_actif', 'true', true)}}

    {{Form::label('est_actif', 'Non actif pour la saison')}}
    {{Form::radio('est_actif', 'false')}}
</div>
<div class="submit">
    <input type="submit" value="Ajouter">
</div>
Langages utilisés :
Crédits
  • Le visuel des pages à été conçu par Elisa Desgroseilliers et Camilo Arias.
  • La programmation à été réalisée avec l’aide de Simon Martin-Hardy et de Marie-France Hétu.