วิธีการติดตั้ง Slim ที่นักพัฒนาแนะนำคือผ่าน PHP Composer
หากคุณใช้การกระจายเช่น Arch Linux หรือขึ้นอยู่กับสิ่งนี้นักแต่งเพลงอยู่ในที่เก็บอย่างเป็นทางการเพื่อให้คุณสามารถติดตั้งด้วย Pacman
# pacman -S composer
ในกรณีที่ไม่ได้ติดตั้งนักแต่งเพลงเขียนในคอนโซลคำสั่งต่อไปนี้:
$ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
หรือถ้าคุณต้องการคุณสามารถใช้สคริปต์ต่อไปนี้ 2 :
#! /bin/sh
EXPECTED_SIGNATURE= $( wget https://composer.github.io/installer.sig -O - -q )
php -r " copy('https://getcomposer.org/installer', 'composer-setup.php'); "
ACTUAL_SIGNATURE= $( php -r " echo hash_file('SHA384', 'composer-setup.php'); " )
if [ " $EXPECTED_SIGNATURE " = " $ACTUAL_SIGNATURE " ]
then
php composer-setup.php --quiet
RESULT= $?
rm composer-setup.php
exit $RESULT
else
>&2 echo ' ERROR: Invalid installer signature '
rm composer-setup.php
exit 1
fi
บันทึกเป็น install-composer.sh เพื่อดำเนินการในเทอร์มินัลด้วยคำสั่ง
$ sh install-composer.sh
หมายเหตุ : ด้วยวิธีนี้เราสามารถปรับปรุงนักแต่งเพลงได้ แต่คุณต้องย้ายไฟล์ pomposer.phar ไปยังโฟลเดอร์ /usr/local/bin/ ด้วยคำสั่ง
# mv composer.phar /usr/local/bin/composer
ด้วยวิธีนี้คุณสามารถดำเนินการเขียนนักแต่งเพลงเฉพาะ composer ในคอนโซลแทน php <Directorio>composer.phar
หากคุณเป็นผู้ใช้ Windows คุณต้องดาวน์โหลด Composer-Setup.*.exe ของที่เก็บนักแต่งเพลงอย่างเป็นทางการใน GitHub ซึ่งอยู่ที่ https://github.com/composer/windows-setup/releases/ และทำตามคำแนะนำที่คุณให้ผู้ติดตั้ง
เราสามารถสร้างโครงการตั้งแต่เริ่มต้นหรือใช้โครงกระดูกที่จัดทำโดย Slim ซึ่งให้การกำหนดค่าอย่างง่ายเพื่อเริ่มแอปพลิเคชันคุณเพียงแค่ต้องเขียนสิ่งต่อไปนี้ในคอนโซล:
$ composer create-proyect slim/slim-skeleton crud-slim
สิ่งนี้จะสร้างไดเรกทอรี crud-slim ใหม่พร้อมไฟล์ที่จำเป็นเพื่อเริ่มเขียนแอปพลิเคชัน
โครงสร้างไดเรกทอรี
crud-slim
├── composer.json
├── composer.lock
├── CONTRIBUTING.md
├── dirstruct.txt
├── logs
│ ├── app.log
│ └── README.md
├── phpunit.xml
├── public
│ └── index.php
├── README.md
├── src
│ ├── dependencies.php
│ ├── middleware.php
│ ├── routes.php
│ └── settings.php
├── templates
│ └── index.phtml
├── tests
│ └── Functional
│ ├── BaseTestCase.php
│ └── HomepageTest.php
└── vendor/...
หมายเหตุ: คณะ vendor/ มีรองผู้อำนวยการหลายคน แต่ไม่แนะนำให้แก้ไขไฟล์ใด ๆ ที่มีอยู่ที่นี่เนื่องจากเป็นที่ที่หน่วยทั้งหมดที่เราจะใช้ภายในแอปพลิเคชันและแก้ไขพวกเขาจะส่งผลกระทบต่อการทำงานของมัน
ถ้าเราดำเนินการ php -S localhost:8080 -t public public/index.php ในไดเรกทอรีของแอปพลิเคชันของเราและเปิดเบราว์เซอร์ของเราใน localhost:8080 มุมมองต่อไปนี้จะปรากฏขึ้น
เราสร้างฐานข้อมูลด้วยชื่อ slim
$ mysql -u[nombre-de-usuario] -p
> CREATE DATABASE slim COLLATE = 'utf8_unicode_ci';
> u slim
เราเพิ่มตาราง usuarios
> CREATE TABLE usuarios ( ` id ` BIGINT NOT NULL AUTO_INCREMENT,
` nombre ` VARCHAR ( 250 ) NOT NULL ,
` correo ` VARCHAR ( 250 ) NOT NULL ,
` clave_acceso ` VARCHAR ( 250 ) NOT NULL ,
PRIMARY KEY ( ` id ` ));เราสร้างฐานข้อมูลที่เราจะใช้สำหรับ CRUD:
เราสร้างตารางผู้ใช้:
ตอนนี้เรามีฐานข้อมูลแล้วเราต้องเพิ่มลงในการกำหนดค่าที่เพรียวบาง สำหรับสิ่งนี้เราเปิดไฟล์ settings.php ที่อยู่ในไดเรกทอรี src และมีสิ่งต่อไปนี้:
<?php
return [
' settings ' => [
' displayErrorDetails ' => true , // set to false in production
' addContentLengthHeader ' => false , // Allow the web server to send the content-length header
// Renderer settings
' renderer ' => [
' template_path ' => __DIR__ . ' /../templates/ ' ,
],
// Monolog settings
' logger ' => [
' name ' => ' slim-app ' ,
' path ' => __DIR__ . ' /../logs/app.log ' ,
' level ' => Monolog Logger:: DEBUG ,
],
],
];
เราเพิ่มหลังจากฟิลด์ logger การกำหนดค่าฐานข้อมูลของเรา
//Configuración de base de datos para Slim
' db ' => [
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' database ' => ' slim '
'username' => '<tu nombre de usuario en mysql> ' ,
'password' => ' <tu contraseña> ' ,
'charset' => ' utf8',
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => '' ,
],
นอกจากนี้ในการโหลดคลาสที่เราจะสร้างในภายหลังโดยอัตโนมัติเราต้องเพิ่มในไฟล์ composer.json Jon A Mapping Autoload กับอนุสัญญา PHP PSR-4
"autoload" : {
"psr-4" : {
"App\" : "src/"
}
} ตอนนี้คุณต้องสร้าง โมเดล แอปพลิเคชัน แม้ว่า SLIM จะไม่เป็นไปตามรูปแบบการออกแบบ MVC (Model-Vista-Controller) ในแบบทั่วไป แต่เราควรมีไดเรกทอรีพิเศษสำหรับแต่ละองค์ประกอบดังนั้นเราจะสร้างไดเรกทอรีสำหรับโมเดลภายใน mkdir modelos src/ กับ File Explorer ของ src
อย่างที่เราทราบ Slim ไม่มีเครื่องมือสำหรับการทำแผนที่ระยะเวลาเริ่มต้น อย่างไรก็ตามมันช่วยให้เราสามารถเพิ่มหนึ่งในกรอบงานอื่นที่เขียนใน PHP; ในกรณีนี้เราจะใช้ Laravel 3
ในการเพิ่ม คารมคมคาย ให้กับ crud ของเราก่อนอื่นเราต้องขอให้นักแต่งเพลงเพิ่มลงในการพึ่งพาแอปพลิเคชันของเรา
$ composer require illuminate/database " ~5.1 " จากนั้นเราเพิ่ม คารมคมคาย ลงใน ภาชนะฉีดแบบพึ่งพา (ต่อไปนี้ cid ) ของแอปพลิเคชัน เราเปิดไฟล์ dependencies.php ที่อยู่ในไดเรกทอรี src และเราเพิ่มมัน
$ container [ ' db ' ] = function ( $ container ) {
$ capsule = new Illuminate Database Capsule Manager ;
$ capsule -> addConnection ( $ container [ ' settings ' ][ ' db ' ]);
return $ capsule ;
}; ในการเริ่มต้น มีคารมคมคาย ในแอปพลิเคชันจะต้องเพิ่มลงใน public/index.php ก่อนที่ app->run();
$ capsule = $ app -> getContainer ()-> get ( ' capsule ' ); // toma el elemento capsule dentro del contenedor de la app
$ capsule -> bootEloquent (); // inicializa Eloquentเราสร้างคลาส Modelless ภายในคณะกรรมการ บริษัท
<?php
namespace App Modelos ;
//importa Eloquent para usarlo en el modelo
use Illuminate Database Eloquent Model as Eloquent ;
n
class ModeloUsuario extends Eloquent
{
// Define la llave primaria de la tabla usuarios
protected $ primaryKey = ' id ' ;
// Define el nombre de la tabla
protected $ table = ' usuarios ' ;
// Define los campos que pueden llenarse en la tabla
protected $ fillable = [
' nombre ' ,
' correo ' ,
' clave_acceso ' ,
];
} นอกจากนี้เรายังจะสร้าง controladores ภายใน src สำหรับไดรเวอร์แอปพลิเคชัน เมื่อไดเรกทอรีถูกสร้างขึ้นเราจะสร้างคลาส คอนโทรลเลอร์ที่มีประโยชน์ ซึ่งจะจัดการกับการทำงานของแอปพลิเคชัน นอกจากนี้เมื่อคอนโทรลเลอร์ของเราจะตรวจสอบเราติดตั้งเครื่องมือตรวจสอบ ความถูกต้อง 4 ผ่าน นักแต่งเพลง
$ composer require respect/validation
<?php
namespace App Controladores ;
use App Modelos ModeloUsuario as Usuario ; // para usar el modelo de usuario
use Slim Views Twig ; // Las vistas de la aplicación
use Slim Router ; // Las rutas de la aplicación
use Respect Validation Validator as v ; // para usar el validador de Respect
/**
* Clase de controlador para el usuario de la aplicación
*/
class ControladorUsuario
{
// objeto de la clase Twig
protected $ view ;
// objeto de la clase Router
protected $ router ;
/**
* Constructor de la clase Controller
* @param type SlimViewsTwig $view - Vista
* @param type SlimRouter $router - Ruta
*/
public function __construct ( Twig $ view , Router $ router )
{
$ this -> view = $ view ;
$ this -> router = $ router ;
}
/**
* Verifica que los parametros que recibe el controlador sean correctos
* @param type array $args - los argumentos a evaluar
*/
public function validaArgs ( $ args )
{
$ valid = [
// verifica que la id sea un entero
v:: intVal ()-> validate ( $ args [ ' id ' ]),
// verifica que se reciba una cadena de al menos longitud 2
v:: stringType ()-> length ( 2 )-> validate ( $ args [ ' nombre ' ]),
// verifica que se reciba un correo
v:: email ()-> validate ( $ args [ ' correo ' ]),
// verifica que no esté en blanco la contraseña
v:: notBlank ()-> validate ( $ args [ ' clave_acceso ' ])
];
}
/**
* Verifica la correctud de un conjunto de validaciones
* @param type array $validaciones - el conjunto de validaciones a evaluar
* @throws Exception cuando las validaciones no están en un arreglo
*/
public static function verifica ( $ validaciones )
{
if (! is_array ( $ validaciones ){
throw new Exception ( ' Las validaciones deben estar en un arreglo ' );
} else {
foreach ( $ validaciones as $ v ){
if ( $ v == false ) {
return false ; // todas las validaciones deben cumplirse para que sea correcto
}
}
return true ;
}
}
/*-- Funciones del CRUD --*/
}คุณต้องเพิ่ม ผู้ใช้ ใน แอปพลิเคชัน ของแอปพลิเคชันเพื่อให้สามารถใช้งานได้
$ container [ ' ControladorUsuario ' ] = function ( $ container ){
return new App Controladores ControladorUsuario ( $ container );
}; โปรดจำไว้ว่าใน ModelUsuario เรากำหนดส่วน ที่เติมได้ สำหรับตารางนี่เป็นเพราะ id กำหนดไว้ในฐานข้อมูลเป็นแอตทริบิวต์อัตโนมัติที่เพิ่มขึ้นจากนั้นเราต้องป้อน 3 ฟิลด์อื่น ๆ ไปยังฐานข้อมูลและเราจะทำกับฟังก์ชั่นนี้:
/**
* Función para crear un usuario
* @param type SlimHttpRequest $request - solicitud http
* @param type SlimHttpResponse $response - respuesta http
*/
public function crea ( $ request , $ response , $ args )
{
/*
getParsedBody() toma los parametros del cuerpo de $request que estén
como json o xml y lo parsea de un modo que PHP lo entienda
*/
$ param = $ request -> getParsedBody ();
$ validaciones = $ this -> validaArgs ( $ param ); // hace las validaciones
if ( verifica ( $ validaciones )){
// evalua si el correo ya existe en la base de datos
$ correo_existente = Usuario:: where ( ' correo ' , $ atr [ ' correo ' ])-> get ()-> first ();
// si el correo ya existe manda un error 403
if ( $ correo_existente ){
echo -> $ this -> error ( ' YA_ESTÁ_REGISTRADO_EL_CORREO ' ,
$ request -> getUri ()-> getPath (),
404 );
return $ this -> response -> withStatus ( 403 );
} else {
//crea un nuevo usuario a partir del modelo
$ usuario = new Usuario ;
// asigna cada elemento del arreglo $atr con su columna en la tabla usuarios
$ usuario -> nombre = $ atr [ ' nombre ' ];
$ usuario -> correo = $ atr [ ' correo ' ];
$ usuario -> clave_acceso = $ atr [ ' clave_acceso ' ];
$ usuario -> save (); //guarda el usuario
// crea una ruta para el usuario con su id
$ path = $ request -> getUri ()-> getPath () . ' / ' . $ usuario -> id ;
return $ response -> withStatus ( 201 ); // el usuario fue creado con éxito
}
}
} ที่นี่มีสองฟังก์ชั่นที่เป็นตัวอย่างอย่างใดอย่างหนึ่งเพื่อแสดงผู้ใช้ที่ลงทะเบียนทั้งหมดและอีกฟังก์ชั่นที่ผู้ใช้เฉพาะแสดง โครงสร้างของรายการ lista.twig และ usuario.twig ที่กล่าวถึงจะถูกอธิบายในรายละเอียดมากขึ้นในส่วนมุมมอง
/**
* Obtiene todos los usuarios de la tabla usuarios y los manda a la vista
* @param type SlimHttpRequest $request - solicitud http
* @param type SlimHttpResponse $response - respuesta http
*/
public function listaUsuarios ( $ request , $ response , $ args )
{
/*
la vista manda un arreglo de usuarios con la respuesta http,
para que lo renderice en en el template lista.twig
*/
return $ this -> view -> render ( $ response , ' lista.twig ' , [ ' usuarios ' => Usuario:: all ()]);
}
/**
* Busca un usuario por su id
* @param type SlimHttpRequest $request - la solicitud http
* @param type SlimHttpResponse $response - la respuesta http
* @param type array $args - argumentos para la función
*/
public function buscaUsuarioID( $ request , $ response , $ args )
{
$ id = $ args [ ' id ' ];
$ valid = [v:: intVal ()-> validate ( $ id )]; // verifica que la id sea un entero
n
// si la validación es correcta
if ( $ valid == true ){
$ usuario = Usuario:: find ( $ id ); // busca la id en la tabla usuarios
if ( $ usuario ){
/*
si el usuario es encontrado, manda una respuesta con éste
y lo renderiza en el template usuario.twig
*/
return $ this -> view -> render ( $ response , ' usuario.twig ' , $ usuario );
} else {
/*
Si no hay un usuario con la id de los parametros, entonces obtiene la uri de la solicitud,
redirecciona a la lista de usuarios y regresa una respuesta con la uri y un status 404 (not found)
*/
$ status = 404 ;
$ uri = $ request -> getUri ()-> withQuery ( '' )-> withPath ( $ this -> router -> pathFor ( ' listaUsuarios ' ));
return $ response -> withRedirect (( string ) $ uri , $ status );
} else {
// si la validación es falsa, regresa un error de bad request
return $ response -> withStatus ( 400 );
}
} ตัวอย่างฟังก์ชั่นเพื่ออัปเดตผู้ใช้
/**
* Actualiza un usuario
* @param type SlimHttpRequest $request - la solicitud http
* @param type SlimHttpResponse $response - la respuesta http
* @param type array $args - argumentos para la función
*/
public function actualiza ( $ request , $ response , $ args )
{
// busca un usuario la id del arreglo de parametros en la tabla usuarios
$ usuario = Usuario:: find (( int ) $ args [ ' id ' ]);
if (! $ usuario ){
/*
Si no hay un usuario con la id de los parametros, entonces obtiene la uri de la solicitud,
redirecciona a la lista de usuarios y regresa una respuesta con la uri y un estado 404 (not found)
*/
$ status = 404 ;
$ uri = $ request -> getUri ()-> withQuery ( '' )-> withPath ( $ this -> router -> pathFor ( ' listaUsuarios ' ));
return $ response -> withRedirect (( string ) $ uri , $ status );
} else {
$ data = $ request -> getParsedBody (); // guarda los argumentos de la solicitud en un arreglo
$ validaciones = $ this -> valida ( $ data ); // valida los datos
if ( verifica ( $ validaciones )){
$ usuario -> update ( $ data ); // Eloquent actualiza la información en la tabla
// regresa una respuesta con la uri y redirecciona a la vista especifica del usuario
$ uri = $ request -> getUri ()-> withQuery ( '' )-> withPath ( $ this -> router -> pathFor ( ' usuario ' , [ ' id ' => $ usuario -> id ]));
return $ response -> withRedirect (( string ) $ uri );
}
}
} พูดจามีสามวิธีในการกำจัดองค์ประกอบออกจากตาราง: ประการแรกคือการกำจัดอินสแตนซ์ของโมเดลที่ไม่ทราบคีย์หลักมันใช้ฟังก์ชัน delete แต่ข้อเสียของมันคือคุณต้องกู้คืนอินสแตนซ์ทั้งหมดก่อนที่จะเรียก delete ; ประการที่สองคือสมมติว่าคีย์หลักของโมเดลเป็นที่รู้จักเรียกฟังก์ชั่น destroy ที่กำจัดโมเดลโดยไม่ต้องกู้คืนอินสแตนซ์ที่สมบูรณ์ ตัวเลือกที่สามคือการปรึกษาหารือเช่น $eliminados = Usuario::where('nombre','like','C%')->delete(); ฉันจะกำจัดผู้ใช้ทั้งหมดที่มีชื่อเริ่มต้นด้วย "C" นอกจากนี้ Eloquent มี การ deeting ที่อ่อนนุ่ม นั่นคือโมเดลจะไม่ถูกลบออกจากฐานข้อมูล แต่มีการเพิ่มแอตทริบิวต์ deleted_at และตามที่นักพัฒนา Laravel แนะนำควรเพิ่มคอลัมน์ลงในตารางเพื่อบรรจุแอตทริบิวต์ดังกล่าว ในการเปิดใช้งานวิธี การลดทอนที่อ่อนนุ่ม ในแอปพลิเคชันคุณต้องเพิ่ม IlluminateDatabaseEloquentSoftDeletes ในรุ่นแอป ตัวอย่างต่อไปนี้ใช้ delete เพื่อตรวจสอบความถูกต้องและให้ความแข็งแกร่งมากขึ้นก่อนที่จะกำจัดโมเดลคุณมีอิสระที่จะใช้ตัวเลือกใด ๆ ที่มีอยู่
/**
* Elimina un usuario
* @param type SlimHttpRequest $request - la solicitud http
* @param type SlimHttpResponse $response - la respuesta http
* @param type array $args - argumentos para la función
*/
public function elimina ( $ request , $ response , $ args )
{
$ usuario = Usuario-> find ( $ args [ ' id ' ]);
$ validaID = [v:: intVal ()-> validate ( $ id )];
if ( $ usuario && $ validaID ){
// si existe el usuario y la validación es correcta, lo elimina
$ usuario -> delete ();
}
/*
regresa una respuesta con la uri y redirecciona a la lista de usuarios,
se haya o no eliminado el usuario
*/
$ uri = $ request -> getUri ()-> withQuery ( '' )-> withPath ( $ this -> router -> pathFor ( ' listaUsuarios ' ));
return $ response -> withRedirect (( string ) $ uri );
}
การใช้เส้นทางที่เพรียวบางถูกสร้างขึ้นจาก Fastroute 5 และให้วิธีการที่จะสามารถทำงานกับวิธี HTTP ที่ใช้กันมากที่สุดนั่นคือ รับ โพสต์ วาง ลบลบ ตัว เลือก ที่สามารถจัดการทีละตัวหรือทั้งหมดในวิธีการสร้างด้วยวิธีการ any() นอกจากนี้ยังเป็นไปได้ที่จะจัดการวิธีการหลายอย่างในเส้นทางเดียวโดยใช้ฟังก์ชัน map() ในแอปพลิเคชันของเราเส้นทางจะพบได้ในไฟล์ src/routes.php ที่มีเส้นทางที่โหลดมุมมองของหน้าโครงกระดูกเริ่มต้นเราไม่ต้องการมันคุณสามารถลบหรือแสดงความคิดเห็นเพื่อแนะนำคุณเมื่อสร้างเส้นทางอื่น เราจะใช้วิธี การ GET ในการโหลดมุมมองและดูผู้ใช้ โพสต์ เพื่อสร้างผู้ใช้ แพตช์ เพื่ออัปเดตผู้ใช้และ มอบหมาย ให้ลบ
เส้นทางที่จัดการเฉพาะ HTTP รับ คำขอใช้วิธี get() ของ SLIM ซึ่งได้รับเป็นข้อโต้แย้งรูปแบบเส้นทาง (พร้อมเครื่องหมายตำแหน่งที่เป็นตัวเลือก) และฟังก์ชั่นการโทรกลับที่สามารถมาจากคอนโทรลเลอร์หรือประกาศบนเส้นทางเดียวกัน
$ app -> get ( ' / ' , function ( $ request , $ response , $ args ){
return $ this -> view -> render ( $ response , " index.twig " );
})-> setName ( ' inicio ' ); สิ่งที่เส้นทางนี้กำลังทำคือสำหรับรูปแบบ "/" (ซึ่งจะเป็นรูปแบบเริ่มต้นของเซิร์ฟเวอร์) เพื่อเรียกฟังก์ชั่นที่ส่งคืนเพื่อตอบสนองมุมมองที่กำหนดไว้ใน index.twig TWIG เส้นทางนี้กำหนดชื่อ "บ้าน" เพื่อให้มุมมองสามารถตีความได้ง่ายขึ้น
// ruta para cargar la vista de todos los usuarios registrados
$ app -> get ( ' /listaUsuarios ' , function ( $ request , $ response , $ args ){
return $ this -> view -> render ( $ response , ' listaUsuarios.twig ' );
})-> setName ( ' listaUsuarios ' );
/*
ruta para cargar la vista de un usuario en especifico definido por su id
empleando la función buscaUsuarioID() de la clase ControladorUsuario,
previamente agregada al CID de la aplicación
*/
$ app -> get ( ' /listaUsuarios/{id} ' , ' ControladorUsuario:buscaUsuarioID ' )-> setName ( ' usuario.ver ' );
// ruta para cargar el formulario para crear usuario
$ app -> get ( ' /nuevo ' , function ( $ request , $ response , $ args ){
return $ this -> view -> render ( $ response , ' formulario_crea.twig ' );
})-> setName ( ' usuario.crear ' );
// ruta para cargar el formulario para actualizar usuario
$ app -> get ( ' /listaUsuarios/{id}/actualiza ' , function ( $ request , $ response , $ args ){
return $ this -> view -> render ( $ response , ' formulario_actualiza.twig ' );
})-> setName ( ' usuario.editar ' );
เช่นเดียวกับ GET Applications Slim มีฟังก์ชั่น post() เพื่อจัดการคำขอ โพสต์ ฟังก์ชั่นนี้ยังได้รับเป็นพารามิเตอร์รูปแบบของเส้นทาง (พร้อมเครื่องหมายตำแหน่งเสริม) และฟังก์ชั่นการเรียกกลับ
// ruta para crear un nuevo usuario
$ app -> post ( " /nuevo " , " ControladorUsuario:crea " ); สามารถสังเกตได้ว่าเส้นทางนี้ไม่ได้ใช้ฟังก์ชั่น setName() เนื่องจากมีเส้นทางที่มีรูปแบบเดียวกัน ("/ใหม่") แต่ใช้วิธีการที่แตกต่างกันทั้งคู่สามารถแบ่งปันชื่อเดียวกันได้
สำหรับ แพตช์ สิ่งที่กล่าวถึงข้างต้นก็เป็นจริงสำหรับ การรับ และ โพสต์ ดังนั้นในการอัปเดตเราจะมีสไตล์นี้:
// ruta para actualizar un usuario
$ app -> patch ( ' listaUsuarios/{id} ' , ' ControladorUsuario:actualiza ' )-> setName ( ' usuario.actualizar ' ); // ruta para eliminar un usuario
$ app -> delete ( ' listaUsuario/{id} ' , ' ControladorUsuario:elimina ' )-> setName ( ' usuario.eliminar ' );เรารู้อยู่แล้วว่า Slim ไม่มีเครื่องมือในการสร้างเทมเพลตของมุมมองของพวกเขาและในความเป็นจริงมุมมองเป็นเพียงส่วนหนึ่งของร่างกายของการตอบสนอง HTTP PSR-7 ที่ Slim ใช้ดังนั้นพวกเขาจึงต้องพึ่งพาเส้นทาง อย่างไรก็ตามพวกเขาสามารถจัดหาได้โดยส่วนประกอบ ส่วนประกอบ และพวกเขาเองให้การใช้งานของสองส่วนประกอบเหล่านี้ Twig และ PHP-view โดยส่วนตัวแล้วฉันชอบ Twig เพราะมันทำให้ฉันมีปัญหาน้อยลงและโดยทั่วไปแล้วมันมีโครงสร้างที่ชัดเจนกว่าเพราะไวยากรณ์ของมันขึ้นอยู่กับเทมเพลต Jinja และ Django แน่นอนว่าทุกอย่างใน Slim การใช้ส่วนประกอบเป็นเรื่องของรสนิยมและเครื่องมืออื่น ๆ สามารถจัดการเพื่อสร้างมุมมองของเรา
อันดับแรกและเช่นเดียวกับส่วนที่เหลือของหน่วยเราจะเพิ่ม กิ่งไม้ โดยใช้ นักแต่งเพลง
$ composer require slim/twig-view
หมายเหตุ : หากคุณต้องการใช้ PHP-view แทน twig มันจะแทนที่เฉพาะ slim/twig-view ด้วย slim/php-view
หลังจากติดตั้ง กิ่งไม้ จะต้องเพิ่ม CID ของแอปพลิเคชันเพื่อให้การลงทะเบียนเป็นหนึ่งในบริการและสามารถใช้งานได้
$ container [ ' view ' ] = function ( $ c ) {
$ settings = $ c -> get ( ' settings ' )[ ' renderer ' ]; //nos indica el directorio donde están las plantillas
$ view = new Slim Views Twig ( $ settings [ ' template_path ' ], [
' cache ' => false ,]); // puede ser false o el directorio donde se guardará la cache
// instancia y añade la extensión especifica de slim
$ basePath = rtrim ( str_ireplace ( ' index.php ' , '' , $ c [ ' request ' ]-> getUri ()-> getBasePath ()), ' / ' );
$ view -> addExtension ( new Slim Views TwigExtension ( $ c [ ' router ' ], $ basePath ));
return $ view ;
};ในโครงสร้าง ทวิก พื้นฐานเราจะพบตัวคั่น 3 ประเภท:
เนื่องจากการออกแบบ Twig นั้นขึ้นอยู่กับเทมเพลตเราสามารถสร้างเค้าโครงเทมเพลตฐาน layout.twig และสืบทอดส่วนที่เหลือของเทมเพลต
<! DOCTYPE html>
<html>
<head>
<title> CRUD SLIM </title>
<meta charset="utf- 8 ">
<meta name="viewport" content="width=device-width, initial-scale= 1 ">
{% block stylesheets %}
{ # Aquí incluimos los archivos CSS o CDN de CSS que usemos #}
<link href="url de cdn" type="text/css" rel="stylesheet" />
{ # la función base_url() le indica a twig que busque desde el directorio raíz de proyecto #}
<link href="{{ base_url() }}/directorio/de/css" type="text/css" rel="stylesheet" />
{% endblock %}
{%block scripts }
{ # Aqui incluimos los .js y otros scripts
<script src="{{ base_url() }}/directorio/de/scripts"></script>
{% endblock %}
</head>
<body>
{% block content %}{% endblock %}
</div>
</body>
</html> เราสามารถให้เทมเพลตที่สืบทอดมาจาก layout.twig ในไดเรกทอรีอื่นเช่น templates/crud เพื่อให้ลำดับชั้นจัดระเบียบระหว่างพวกเขา
หากเราจำเส้นทางได้มุมมองที่โหลดเมื่อเริ่มต้นแอปพลิเคชันคือ index.twig ที่จะมีโครงสร้างเช่นต่อไปนี้:
{% extends ' layout.twig ' %}
{% block content %}
{ # la función path_for('') llama la ruta con el nombre que recibe como parametro #}
<a href="{{ path_for ( ' listaUsuarios ' ) }} " >Lista los usuarios registrados</a>
<a href= " {{ path_for ( ' usuario.crear ' ) }} " >Agrega un nuevo usuario</a>
{% endblock %}
Form formulario_crea.twig
{% extends ' layout.twig ' %}
{% block content %}
{ # manda los datos del formulario a la ruta 'usuario.crear' con un método post #}
<form action="{{ path_for ( ' usuario.crear ' ) }} " method= " post" autocomplete="off">
<label for="nombre">Nombre
<input type="text" name="nombre" id="nombre" placeholder="Escribe tu nombre">
</label>
<label for="correo">Correo
<input type="email" name="correo" id="correo" placeholder="Escribe tu correo">
</label>
<label for="clave_acceso">Contraseña
<input type="password" name="clave_acceso" id="clave_acceso" placeholder="Escribe tu contraseña">
<button type="submit">Agregar</button>
{% endblock %} รูปแบบของ formulario_actualiza.twig
{% extends ' layout.twig ' %}
{% block content %}
{ # manda los datos del formulario a la ruta 'usuario.actualizar' con un método patch #}
<form action="{{ path_for ( ' usuario.actualizar ' ) }} " method= " patch" autocomplete="off">
<label for="nombre">Nombre
<input type="text" name="nombre" id="nombre" placeholder="Escribe tu nombre">
</label>
<label for="correo">Correo
<input type="email" name="correo" id="correo" placeholder="Escribe tu correo">
</label>
<label for="clave_acceso">Contraseña
<input type="password" name="clave_acceso" id="clave_acceso" placeholder="Escribe tu contraseña">
<button type="submit">Actualiza</button>
{% endblock %} listaUsuario.twig โครงสร้าง
{% extends ' layout.twig ' %}
{% block content %}
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Correo</th>
</tr>
</thead>
<tbody>
{ # itera la tabla usuarios del modelo #}
{% for usuario in usuarios %}
<tr>
<td>{{ usuario.nombre }}</td>
<td>{{ usuario.correo }}</td>
<td><a href="{{ path_for ( ' usuario.ver ' ) }} " >ver</a></td>
<td><a href= " {{ path_for ( ' usuario.eliminar ' ) }} " >eliminar</a><td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %} โครงสร้าง usuario.twig
{% extends ' layout.twig ' %}
{% block content %}
<h1>{{ usuario.nombre }}</h1>
<h2>{{ usuario.correo }}</h2>
<img src="http: //i.imgur.com/Y9IVuHg.jpg"/>
{% endblock %}โปรดจำไว้ว่าหลักฐานของเฟรมเวิร์กนี้คือการใช้เฉพาะสิ่งที่คุณพิจารณาว่าจำเป็นและไม่มากไปกว่านั้น ขนาดของโครงการของคุณถูกกำหนดโดยตัวคุณเองและไม่ใช่โดยกรอบ
1: Mariadbcom (2016) Mariadbcom สืบค้น 25 กันยายน 2559 จาก https://mariadb.com/blog/why-hould-you-migrate-mysql-mariadb
2: จะติดตั้งนักแต่งเพลงได้อย่างไร?#. (ND) สืบค้น 25 กันยายน 2016 จาก https://getComposer.org/doc/faqs/how-to-install-composer-programmatically.md
3: พูดคุย: เริ่มต้น - Laravel - กรอบ PHP สำหรับช่างฝีมือเว็บ (ND) สืบค้น 29 กันยายน 2016 จาก https://lavel.com/docs/5.1/eloquent
4: การตรวจสอบที่มีประสิทธิภาพด้วยความเคารพ สืบค้น Septamber 30, 2016, จาก https://websec.io/2013/04/01/effective-validation-with-respect.html
5: N. (2016) FastTroute สืบค้น 12 ตุลาคม 2559 จาก https://github.com/nikic/fastroute
Codecourse (2016, 13 เมษายน) การรับรองความถูกต้องด้วย Slim 3 ดึงมาจาก https://www.youtube.com/playlist?ist=plfdthywgc_yy90xrdq6mrww042aec
Rob Allen's Devnotes (2016, 28 กรกฎาคม) สืบค้น 08 พฤศจิกายน 2016 จาก https://akrabat.com/category/slim-framework/