NF2 - Framework Laravel

De wikiserver
La revisió el 11:50, 31 oct 2019 per Jnoguera (Discussió | contribucions) (=RUTAS BÁSICAS)
Dreceres ràpides: navegació, cerca

ESTRUCTURA DIRECTORIOS

=RUTAS BÁSICAS

Dentro de Routers->Web

Route::get('mundo', function () {
    return 'Hello World';
});

Creamos un controlador vacio, App->http->Controller->

php artisan make:controller MoviesController --plain
en route
Route::get('/ejemplo', 'PeliculasController@index');
en controlador
public function index(){

echo "hola Julio";

}


//verbos HTTP múltiples
Route::match(['get', 'post'], '/', function () {
    //
});

//verbos HTTP cualquiera
Route::any('/', function () {
    //
});


//dentro de la misma vista
Route::get('/show/{id?}',function($id="122"){

    return $id;
    
    })->name('show');


Route::get('/par-o-impar-{numero}',function($numero){    // no hace falta usar '/'

return $numero;

//return redirect()->to('/show/3');  -> te redirije a la ruta que le indicas 
//return redirect()->route('show')  -> te redirije a la ruta que tiene el nombre asignado en el name.
//return redirect()->route('show',['id' => '222'])  -> en caso de pasarle algun parámetro
} )->where(['number' => '[\d]+']);    // de esta forma añadimos una expresion regular para que solo puedan introducir numeros


Route::get('user/{name?}', function ($name = 'John') {  //$name=null
    return $name;
});

Restricciones con Expresiones Regulares

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');   //nomes poden passar lletres miníscules o Majúscules como mínim una volta 

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);   //le pasamos un array en caso de más de un elemento.


Route::group(['prefix'=>'admin'],function(){  // en el navegador puedes poner /admin/modificar-usuario  o  /admin/insertar-usuario
    
    Route::get('modificar-usuario',function(){

    return "modifica usuario";

    });


    Route::get('insertar-usuario',function(){

    return "insertar usuario";

    });

});

RELACIONES

Se deben de hacer las relaciones de la base de datos en las migraciones y también en los modelos para facilitar a Eloquent las consultas.

Relaciones Uno a Muchos Migraciones

un usuario tiene muchos post y un post lo tiene un usuario

//tabla Users
 Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

//tabla Posts

 Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('user_id')->unsigned();
            $table->integer('category_id')->unsigned();
            
            $table->string('name',128)->unique();
            $table->string('slug',128)->unique();

            $table->mediumText('excerpt')->nullable();
            $table->text('body');
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');

            $table->string('file', 128)->nullable();

            $table->timestamps();

            //relaciones
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
           //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');

        });


Para las relaciones NxM Muchos a Muchos. Un post puede tener muchas Etiquetas y una etiqueta puede tener muchos Posts, por tanto habrá que crear una tabla auxiliar.

//Tabla Post
 Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');

           // $table->integer('user_id')->unsigned();
           // $table->integer('category_id')->unsigned();
            
            $table->string('name',128)->unique();
            $table->string('slug',128)->unique();

            $table->mediumText('excerpt')->nullable();
            $table->text('body');
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');

            $table->string('file', 128)->nullable();

            $table->timestamps();

            //relaciones
            //$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');

        });

//tabla Tags

Schema::create('tags', function (Blueprint $table) {
            $table->increments('id');

            $table->string('name',128);
            $table->string('slug',128)->unique();

            $table->timestamps();
        });


//tabla auxiliar

  Schema::create('post_tag', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('post_id')->unsigned();
            $table->integer('tag_id')->unsigned();

            $table->timestamps();

             //relaciones
             $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade')->onUpdate('cascade');
             $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade')->onUpdate('cascade');
 
        });