Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Framework PHP
Laravel.com
Laravel.com
¿Qué es un framework?
Laravel.com
¿Por qué utilizar un framework?
Laravel.com
Framework mas utilizados
Laravel.com
¿PHP como lenguaje de desarrollo web?
Laravel.com
Principales características de PHP
Mas rápido que ASP
Es el mas sencillo de aprender
Acceso a mas de 20 tipos de bases de datos
Diseño modular y de fácil ampliación
Gran extensión de documentación
Gran cantidad de framework, cms, etc.
Multiplataforma
Licencia abierta
Laravel.com
Sistema de control de versiones
GitHub
Laravel.com
Sistema de control de versiones
Laravel.com
Sistema de control de versiones
Principales comandos git
GIT CODE
> git init
> git add FILE.txt
> git commit –m “mi primer commit”
> git branch dev
> git checkout dev
> git merge dev
> git remote add origin https://github.com/user/Project.git
> git push –u origin master
Laravel.com
¿La mejor herramienta para programar?
Laravel.com
LARAVEL 5
Laravel radica en su integración, escalabilidad y facilidad de
mantenimiento. Elegante, simple y rápido
Blade
Eloquent ORM
Routing
Middlewares
Accesibilidad para el desarrollo FULL STAK
Pensada para API REST
Código abierto publicada bajo la licencia MIT
Comunidad y documentación
Laravel.com
¿Cómo funciona Laravel?
Laravel.com
Configuración del entorno de trabajo
Git
https://git-scm.com/downloads
PhpStorm
https://www.jetbrains.com/phpstorm/download/
https://www.sublimetext.com/3
Composer
https://getcomposer.org/download/
Servidor local
https://bitnami.com/stack/wamp/installer
Laravel.com
Instalando y configurando Laravel
Documentación
https://laravel.com/docs/5.5
COMPOSER
> composer create-project --prefer-dist laravel/laravel blog "5.5.*"
Requerimientos
PHP >= 7.0.0
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
Laravel.com
Rutas
Documentación
https://laravel.com/docs/5.5/routing
Directorio
Route::get('/saludar', function () {
return 'Hello World';
Route::get('/user/profile',
});
'UserController@showProfile')->name('profile');
Route::get('/saludar/{id}', function ($id) {
Route::get($uri, $callback);
return 'hola '.$id;
Route::post($uri, $callback);
});
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::get('/user', 'UserController@index');
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::group(['middleware' =>
['admin'],'namespace' => 'Admin'],function() {
Route::resource('/user', 'UserController');
//code
});
Laravel.com
Controlador
Documentación
https://laravel.com/docs/5.5/controllers
Directorio
ARTISAN
php artisan make:controller EstudianteController
php artisan make:controller Estudiante\EstudianteController
php artisan make:controller Estudiante\EstudianteController --resource
CONTROLLER
return 'Hola mundo';
return response()->json($data);
return view('saludar');
return view('saludar',$data);
Laravel.com
Vista
Documentación
https://laravel.com/docs/5.5/views
https://laravel.com/docs/5.5/blade
Directorio
BLADE BLADE
<!-- Stored in resources/views/layouts/app.blade.php --> <!-- Stored in resources/views/child.blade.php -->
<html>
<head> @extends('layouts.app')
<title>App Name - @yield('title')</title> @section('title', 'Page Title')
</head>
<body> @section('sidebar')
@section('sidebar') @parent
This is the master sidebar. <p>This is appended to the master sidebar.</p>
@show @endsection
<div class="container"> @section('content')
@yield('content') <p>This is my body content.</p>
</div> @endsection
</body>
</html>
Laravel.com
Modelo
Documentación
https://laravel.com/docs/5.5
Directorio
ARTISAN
php artisan make:model Estudiante
php artisan make:model Model\Estudiante
php artisan make:model Model\Estudiante -m
Laravel.com
Trabajando con bases de datos
Configurar el archivo .env
CMD
copy .env.example .env
php artisan key:generate
.ENV .ENV
APP_NAME=Laravel
APP_NAME=Laravel
APP_ENV=local
APP_ENV=local
APP_KEY=base64:HMU5/JkS1MEqh3n2+GRBpp+hm95Yl
APP_KEY=
QhtqZdw/BMbwfE=
APP_DEBUG=true
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_HOST=127.0.0.1
DB_PORT=3306
DB_PORT=3306
DB_DATABASE=homestead
DB_DATABASE=db_opencode
DB_USERNAME=homestead
DB_USERNAME=root
DB_PASSWORD=secret
DB_PASSWORD=system
Laravel.com
Tablas de ejemplo
Ejemplo 1 Ejemplo 2
Laravel.com
Migraciones
Documentación
https://laravel.com/docs/5.5/migrations
Directorio
Laravel.com
Migraciones
Llaves foráneas en migraciones
MIGRATIONS
$table->foreign('estudiante_id')->references('id')->on('estudiantes')->onDelete('set null');
$table->foreign('estudiante_id')->references('id')->on('estudiantes')->onDelete('cascade');
Laravel.com
Migraciones Error
Directorio
PROVIDER
use Illuminate\Support\Facades\Schema;
Laravel.com
Seeders
Documentación
https://laravel.com/docs/5.5/seeding
Directorio
Laravel.com
Autenticación de usuarios
Documentación
https://laravel.com/docs/5.5/authentication#authentication-quickstart
php artisan make:auth ARTISAN
php artisan migrate:refresh --seed
php artisan serve --host=192.168.0.20 --port=8282
Laravel.com
Integración de plantillas AdminLTE
Documentación
https://adminlte.io/
ASSETS MENU
{{URL::asset(‘script.js')}}
{{URL::asset(‘style.css')}} <li class="@if(request()->is('home')) open @endif ">
{{URL::asset(‘img/perfil.jpg')}} <a href="{{url('home')}}"></a>
{{URL::asset(‘multimedia/play.mp4')}} </li>
Laravel.com
CRUD – Listar
Documentación
https://laravel.com/docs/5.5/responses#other-response-types
ROUTE
Route::get('/estudiantes',‘Estudiante\EstudianteController@index');
Laravel.com
Paginación
Documentación
https://laravel.com/docs/5.5/pagination
ROUTE
Route::get('/estudiantes',‘Estudiante\EstudianteController@index');
CONTROLLER VIEW
// App\Http\Controllers\Estudiante;
…
public function index() </table>
{ <div class="text-center">
// $estudiante = Estudiante::select('*')- {!!$estudiante->links()!!}
>orderBy('id','desc‘)->paginate(3); </div>
$estudiante = DB::table('estudiantes')->paginate(3);
return view('pages.estudiante',compact('estudiante'));
}
Laravel.com
CRUD – Crear
Documentación
https://laravel.com/docs/5.5/queries#inserts
https://laravel.com/docs/5.5/eloquent-relationships#the-save-method
https://laravel.com/docs/5.5/eloquent-relationships#the-create-method
ROUTE
Route::post('/estudiantes',‘Estudiante\EstudianteController@store');
CONTROLLER VIEW
Estudiante::insert([
'nombres' => $request->input('nombres'),
]); // app/resources/views/pages/estudiante.blade.php
Laravel.com
Validaciones en el servidor
Documentación
https://laravel.com/docs/5.5/validation
$this->validate($request, [ CONTROLLER VIEW
'nombres' => 'required|min:5‘, @if ($errors->any())
]); <div class="alert alert-danger">
<ul>
$this->validate($request, [ @foreach ($errors->all() as $error)
'nombres' => 'required|min:5', <li>{{ $error }}</li>
], [ @endforeach
'nombres.required' => 'El campo nombre es obligatorio. ', </ul>
'nombres.min' => 'El nombre debe tener al menos 5 </div>
caracteres. ', @endif
]);
Laravel.com
Cambiando el idioma a español
Documentación
https://github.com/Laraveles/spanish
Directorio
Configurar el idioma
app.php
Laravel.com
Validaciones en el front
Documentación
http://www.formvalidator.net/
BLADE BLADE
<script src="{{URL::asset('jquery.form-validator.js')}}">
</script>
<div class="form-group">
<script> <label for="nombres">Nombres: </label>
$(window).load(function () { <input type="text" name="nombres" id="nombres"
$.validate({ class="form-control" data-sanitize="trim upper" data-
lang : 'es', validation="required, length" data-validation-
modules : 'sanitize, date, security, file, html5', length="min3">
}); </div>
});
</script>
Laravel.com
Mensajes Flash
Documentación
https://laravel.com/docs/5.5/session#using-the-session
CONTROLLER VIEW
@if(Session::has('success'))
use Session; {{Session::get('success')}}
@endif
Session::flash('success', 'Registro agregado con exito!!!');
Session::flash('error', 'Error al insertar!!!'); @if(Session::has('error'))
{{Session::get('error')}}
@endif
Laravel.com
CRUD – Actualizar
Documentación
https://laravel.com/docs/5.5/queries#updates
ROUTE
Route::get('/estudiantes/{id}/edit ','Estudiante\EstudianteController@edit');
Route::post('/estudiantes/{id} ','Estudiante\EstudianteController@update');
Laravel.com
CRUD – Eliminar
Documentación
https://laravel.com/docs/5.5/queries#deletes
ROUTE
Route::get('/estudiantes/{id}/eliminar','Estudiante\EstudianteController@destroy');
CONTROLLER VIEW
Laravel.com
Documentación
Middlewares
https://laravel.com/docs/5.5/middleware
Directorio
ROUTE
Route::get('/estudiantes','Estudiante\EstudianteController@index')->middleware('auth');
ARTISAN
php artisan make:middleware NameMiddleware
Laravel.com
Redireccionando a un usuario según su rol
ARTISAN
php artisan make:middleware AdminMiddleware
MIDDLEWARE Kernel.php
protected $routeMiddleware = [
public function handle($request, Closure $next) 'admin' =>
{ \App\Http\Middleware\AdminMiddleware::class,
if(auth()->user()->name == 'admin'){ ];
return $next($request);
}else{
return redirect('/home');
} ROUTE
Route::group(['middleware' =>
}
['auth','admin'],'namespace' => 'Estudiante'],function() {
Route::get('/estudiantes','EstudianteController@index');
});
Laravel.com
CRUD con AJAX - Listar
ROUTE
Route::get('estudiantes/estudianteDataAll','Estudiante\EstudianteController@estudianteDataAll');
Laravel.com
CRUD con AJAX - Crear
ROUTE
Route::post('/estudiantes','Estudiante\EstudianteController@store')->name('estudiante.store');
CONTROLLER
public function store(Request $request)
{
if ($request->ajax())
{
$estudiante = new Estudiante();
$estudiante->nombres = $request->input('nombres');
$estudiante->paterno = $request->input('paterno');
$estudiante->materno = $request->input('materno');
$result = $estudiante->save();
if ($result) {
return response()->json(['success' => 'true']);
}else {
return response()->json(['success' => 'false']);
}
}
}
Laravel.com
CRUD con AJAX - Crear
SCRIPT
datatype: 'json',
$('#form-estudiante').submit(function (e) { processData: false,
e.preventDefault(); contentType: false,
$form = $(this); success: function (data) {
var route = "{{ route('estudiante.store') }}"; if (data.success) {
var token = $('input[name=_token]').val(); $('#form-estudiante').trigger('reset');
var data = new FormData(); listarEstudiante();
data.append('nombres', $('#form-estudiante console.log('insertado correctamente');
input:text[name=nombres]').val()); }
data.append('paterno', $('#form-estudiante },
input:text[name=paterno]').val()); error: function (data) {
data.append('materno', $('#form-estudiante $.each(data.responseJSON.errors, function (index,
input:text[name=materno]').val()); error) {
$.ajax({ console.log(error);
url: route, });
headers: {'X-CSRF-TOKEN': token}, }
type: 'post', });
data: data, });
};
Laravel.com
CRUD con AJAX - Actualizar
ROUTE
Route::get('/estudiantes/{id}/edit ','Estudiante\EstudianteController@edit');
Route::post('/estudiantes/{id}','Estudiante\EstudianteController@update');
Laravel.com
CRUD con AJAX – Actualizar (CODIGO MEJORADO)
$('#form-estudiante').submit(function (e) { SCRIPT SCRIPT
else {
e.preventDefault();
var route = "{{ route('estudiante.store') }}";
$form = $(this);
$.ajax({
if (!$form.isValid()) return false;
url: route,
var token = $('input[name=_token]').val();
headers: {'X-CSRF-TOKEN': token},
if ($('#updateEstudiante-id').val()){
type: "POST",
var route = "{{ route('estudiante.update') }}";
data: new FormData($form[0]),
$.ajax({
dataType: 'json',
url: route,
processData: false,
headers: {'X-CSRF-TOKEN': token},
contentType: false,
type: "POST",
success: function (data) {
data: new FormData($form[0]),
if (data.success = true) {
dataType: 'json',
$('#estudianteModal').trigger('reset');
processData: false,
}
contentType: false,
},
success: function (data) {
error: function (data) {
if (data.success) {
$.each(data.responseJSON.errors, function (index, error) {
$('#updateEstudiante-id').val('');
console.log(error);
$('#form-estudiante').trigger('reset');
});
}
}
},
});
error: function (data) {
}
$.each(data.responseJSON.errors, function (index, error) {
});
console.log(error);
});
// if (data.status == 422) {
// console.clear();
// }
}
});
Laravel.com
}
CRUD con AJAX - Eliminar
ROUTE
Route::delete('/estudiantes/{id?}','Estudiante\EstudianteController@destroy')->name('estudiante.destroy');
Laravel.com
Plugins para el tratamiento de mensajes
Documentación
https://kamranahmed.info/toast
https://craftpip.github.io/jquery-confirm/
Laravel.com
Subiendo una imagen con AJAX
Documentación
http://image.intervention.io/
if ($request->file('imagen')) CONTROLLER
{
$this->validate($request,[
'imagen' => 'image|mimes:jpeg,bmp,png|max:2048',
],[
'imagen.image' => 'el archivo no tiene un formato valido de una imagen. ',
'imagen.max' => 'la imagen debe tener como maximo 2 MegaBytes. ',
'imagen.mimes' => 'el archivo debe tener formato tipo imagen, jpg, jpeg, png.
',
]);
$random = str_random(20);
$extension = $request->file('imagen')->getClientOriginalExtension();
$file_name = 'estudiante-'.$random.'.'.$extension;
$path = public_path('upload/images/'.$file_name);
Image::make($request->file('imagen'))->fit(300,300)->save($path);
}
if(data.imagen_portada_path){ SCRIPT
$('.image-profile').attr('style',"background: url({{url('images')}}/"+data.imagen_portada_path+"?"+
new Date().getTime()+")");
} Laravel.com
Discos en laravel (storage)
Documentación
https://laravel.com/docs/5.5/filesystem
Directorio
Filesystem.php
'disks' => [
'imagen' => [
'driver' => 'local',
'root' => storage_path('app/opencode/imagen'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
]
Laravel.com
Subiendo multimedia al Storage
$imagen_perfil = $request->file('imagen_perfil');
CONTROLLER
if ($imagen_perfil) {
$this->validate($request, [
'imagen_perfil' => 'image|mimes:jpeg,bmp,png|max:5120',
], [
'imagen_perfil.image' => 'El archivo no tiene un formato valido de una
imagen. ',
'imagen_perfil.max' => 'La imagen debe tener como maximo 5 MegaBytes. ',
'imagen_perfil.mimes' => 'El archivo debe tener formato tipo imagen, jpg,
jpeg, png. ',
]);
$random = str_random(20);
$extension = $imagen_perfil->getClientOriginalExtension();
$imagen_perfil_path = 'perfil_' . $random . '.' . $extension;
$image_fit = Image::make($imagen_perfil)->fit(240,240)->encode();
Storage::disk('images')->put($imagen_perfil_path, $image_fit);
}
Laravel.com
Documentación
Helpers
https://laravel.com/docs/5.5/helpers
Directorio
EstudiantePublic.php App.php
<?php 'aliases' => [
namespace App\Helpers; 'EstudiantePublic' =>
class PublicData App\Helpers\EstudiantePublic::class,
{ ]
public static function show()
{
$data = \App\Model\Estudiantes::first();
if(isset($data)){ BLADE
return $data;
}else return 'no data';
{{EstudiantePublic::show()->nombres}}
}
}
Laravel.com
Manejo de errores 404
Documentación
https://laravel.com/docs/5.5/errors
Directorio
Handler.php
public function render($request, Exception $exception)
{
if($this->isHttpException($exception)){
switch ($exception->getStatusCode()) {
case 404:
return response()->view('errors.404',[],404);
break;
case '500':
return response()->view('errors.500',[],500);
break;
default:
return $this->renderHttpException($exception);
break;
}
}
return parent::render($request, $exception);
}
Laravel.com
Eventos en laravel
Documentación
https://laravel.com/docs/5.5/events
Directorio
ARTISAN
php artisan make:event SessionEvent
Laravel.com
Manejo de roles y privilegios con spatie
Documentación
https://github.com/spatie/laravel-permission
Laravel.com
DataTables
Documentación
https://datatables.net/
http://yajrabox.com/docs/laravel-datatables/master
COMPOSER
composer require yajra/laravel-datatables-oracle:^8.0
CONTROLLER
return datatables()->of($data)->toJson();
Laravel.com
Restablecimiento de password
Documentación
https://laravel.com/docs/5.5/passwords
.ENV
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
Laravel.com
Homestead
Documentación
https://laravel.com/docs/5.5/homestead
Laravel.com
Las API REST
Documentación
https://lumen.laravel.com/docs/5.7
Laravel.com
Subiendo proyecto laravel a un hosting
Documentación
https://www.000webhost.com/
Laravel.com
GRACIAS
Laravel.com
Por: Clynroje
Email: roje.xdd@gmail.com
Wsp: 69888707
Laravel.com