개발자가 권장하는 Slim을 설치하는 방법은 PHP Composer를 통한 것입니다.
Arch Linux와 같은 분포를 사용하거나이를 기반으로하는 경우 Composer는 공식 리포지토리에 있으므로 Pacman과 함께 설치할 수 있습니다.
# pacman -S composer
그렇지 않은 경우, Composer Writes를 콘솔에 설치하려면 다음 명령을 다음 명령합니다.
$ 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
참고 :이 방법을 통해 Composer를 업데이트 할 수 있지만 Composer.phar 파일을 명령과 함께 폴더 /usr/local/bin/ 로 이동해야합니다.
# mv composer.phar /usr/local/bin/composer
이러한 방식으로 Composer Writing을 php <Directorio>composer.phar 대신 콘솔에서 composer 만 실행할 수 있습니다.
Windows 사용자 인 경우 Composer-Setup.*.exe https://github.com/composer/windows-setup/releases/에있는 Github에있는 공식 작곡가 저장소의 Composer-Setup.*.exe 와 설치자에게 제공하는 지침을 따르십시오.
우리는 처음부터 프로젝트를 만들거나 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에 사용할 데이터베이스를 만듭니다.
사용자 테이블을 만듭니다.
이제 데이터베이스가 있으므로 슬림 한 구성에 추가해야합니다. 이를 위해 src 디렉토리에 위치하고 다음이 포함 된 settings.php 파일을 열어줍니다.
<?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 PHP PSR-4 컨벤션을 통한 자동 부로 매핑.
"autoload" : {
"psr-4" : {
"App\" : "src/"
}
} 이제 응용 프로그램 모델을 만들어야합니다. Slim은 기존의 방식으로 MVC 디자인 패턴 (Model-Vista-Controller)을 따르지 않지만 각 구성 요소에 대한 독점 디렉토리가 있어야하므로 src/ 내에서 src 디렉토리의 mkdir modelos 명령을 사용하여 SRC/ 내에서 모델에 대한 디렉토리를 만들 것입니다.
우리가 알다시피, Slim에는 기본 객체-수용 맵핑을위한 도구가 없습니다. 그러나 PHP로 작성된 다른 프레임 워크 중 하나를 추가 할 수 있습니다. 이 경우 우리는 Laravel의 Eloquent 3을 사용합니다.
CRUD에 웅변을 추가하려면 먼저 작곡가에게 응용 프로그램의 종속성에 추가하도록 요청해야합니다.
$ composer require illuminate/database " ~5.1 " 그런 다음 응용 프로그램의 종속성 분사 컨테이너 (이하 CID )에 웅변을 추가합니다. src 디렉토리에있는 dependencies.php 파일을 열고 추가합니다.
$ container [ ' db ' ] = function ( $ container ) {
$ capsule = new Illuminate Database Capsule Manager ;
$ capsule -> addConnection ( $ container [ ' settings ' ][ ' db ' ]);
return $ capsule ;
}; 응용 프로그램에서 웅변을 초기화하려면 app->run(); 전에 public/index.php 에 추가되어야합니다.
$ 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 ' ,
];
} 또한 애플리케이션 드라이버를위한 src 내에 controladores 만들 것입니다. 디렉토리가 생성되면 응용 프로그램의 작동을 처리 할 유용한 컨트롤러 클래스를 작성합니다. 또한 컨트롤러가 유효성을 유지하므로 Composer를 통해 유효성 검사 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 );
}; ModelUuario 에서 우리는 테이블의 채우기 부품을 정의합니다. 이것은 데이터베이스에서 자동 속성으로 정의 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
}
}
} 여기에는 두 가지 기능이 예시되어 있습니다. 하나는 등록 된 모든 사용자와 다른 사용자가 표시하는 위치에 표시됩니다. Templates 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 );
}
}
} Eloquent는 테이블에서 요소를 제거하는 세 가지 방법을 가지고 있습니다. 첫 번째는 기본 키가 알려지지 않은 모델의 인스턴스를 제거하는 것입니다. delete 기능을 사용하지만 그 단점은 delete 호출하기 전에 전체 인스턴스를 복구해야한다는 것입니다. 두 번째는 모델의 기본 키가 알려져 있다고 가정하면 전체 인스턴스를 복구하지 않고도 모델을 제거하는 destroy 함수를 호출합니다. 세 번째 옵션은 상담에 의한 것입니다. 예를 들어 $eliminados = Usuario::where('nombre','like','C%')->delete(); 이름이 "C"로 시작하는 모든 사용자를 제거합니다. 또한 Eloquent는 소프트 디 에이팅을 가지고 있습니다. 즉, 모델은 데이터베이스에서 삭제되지 않지만 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 방법, 즉, get , post , put , delete , patch , 옵션을 하나 또는 모두 any() 방법으로 생성 할 수있는 옵션을 사용할 수있는 방법을 제공합니다. 또한 map() 함수를 사용하여 단일 경로에서 여러 방법을 처리 할 수 있습니다. 응용 프로그램에서 경로는 초기 골격 페이지의보기를로드하는 경로가 포함 된 src/routes.php 파일에 있습니다. 필요하지 않으면 다른 경로를 만들 때 안내 할 필요가 없습니다. GET 메소드를 사용하여보기를로드하고 사용자를보고 사용자를 작성하고 , 사용자를 만들고, 사용자를 업데이트 하고 삭제하도록 대표합니다 .
HTTP get 요청 만 처리하는 경로는 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 애플리케이션과 마찬가지로 Slim에는 post() 기능이 게시물 요청을 처리합니다. 이 함수는 또한 경로의 패턴 (선택적 위치 마커) 및 콜백 함수의 매개 변수로 수신됩니다.
// ruta para crear un nuevo usuario
$ app -> post ( " /nuevo " , " ControladorUsuario:crea " ); 이 경로는 이미 동일한 패턴 ( "/new")을 가진 경로가 있지만 다른 메소드를 사용할 수 있으므로 setName() 함수를 사용하지 않는다는 점에 유의 할 수 있습니다. 둘 다 동일한 이름을 공유 할 수 있습니다.
패치 의 경우 위에서 언급 한 내용도 Get and Post를 위해 충족됩니다. 따라서 업데이트하려면이 스타일 중 일부를 가질 것입니다.
// 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이 뷰의 템플릿을 생성하는 도구가 없다는 것을 이미 알고 있으며 실제로보기는 Slim을 구현하는 PSR-7 HTTP 응답의 본문의 일부일 뿐이므로 반드시 경로에 의존합니다. 그러나 구성 요소 구성 요소 구성 요소에 의해 제공 될 수 있으며 자체적으로 이러한 두 구성 요소 인 Twig 및 PHP-View 의 구현을 제공합니다. 나는 개인적으로 Twig가 문제를 줄 였기 때문에 Twig를 선호하며 일반적으로 구문은 Jinja 및 Django 템플릿을 기반으로하기 때문에 더 명확한 구조를 가지고 있습니다. 물론, 슬림 한 모든 것들과 마찬가지로, 구성 요소의 사용은 맛의 문제이며 다른 도구는 우리의 견해를 생성 할 수 있습니다.
먼저, 나머지 장치와 마찬가지로 작곡가를 사용하여 Twig를 추가합니다.
$ composer require slim/twig-view
참고 : Twig 대신 PHP-View를 사용하려면 slim/twig-view slim/php-view 로만 대체합니다.
Twig를 설치 한 후에는 애플리케이션의 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 Design은 템플릿을 기반으로하므로 layout.twig 만들 수 있습니다 .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 와 같은 다른 디렉토리의 Twig가 계층을 구성하여 계층을 구성합니다.
경로를 기억하면 응용 프로그램을 시작할 때로드하는 뷰는 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 %}
양식 구조 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 구조 .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). 마리아드 브콤. 2016 년 9 월 25 일 https://mariadb.com/blog/why-should-you-mygrate-mysql-mariadb에서 검색했습니다.
2 : 작곡가를 프로그래밍 방식으로 설치하는 방법?#. (nd). 2016 년 9 월 25 일에 https://getcomposer.org/doc/faqs/how-to-install-composer-programmental.md에서 검색했습니다.
3 : Eloquent : 시작하기 -Laravel- 웹 장인을위한 PHP 프레임 워크. (nd). https://lavel.com/docs/5.1/eloquent에서 2016 년 9 월 29 일에 확인 함
4 : 존중에 대한 효과적인 검증. https://websec.io/2013/04/01/effective-validation-with-respect.html에서 2016 년 9 월 30 일을 검색했습니다
5 : N. (2016). FastTroute. 2016 년 10 월 12 일 https://github.com/nikic/fastroute에서 검색했습니다
코드 코스 (2016 년 4 월 13 일). https://www.youtube.com/playlist?ist=plfdthywgc_yy90xrdq6mrww042aec에서 검색 한 Slim 3으로 인증
Rob Allen의 Devnotes. (2016, 7 월 28 일). 2016 년 11 월 8 일에 https://akrabat.com/category/slim-framework/에서 검색했습니다.