開発者が推奨するSlimをインストールする方法は、PHP Composerを使用することです。
Arch Linuxのような分布を使用している場合、またはこれに基づいて使用する場合、Composerは公式のリポジトリに属しているため、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
注:この方法により、Composerを更新することができますが、Composer.pharファイルをフォルダー/usr/local/bin/に移動する必要があります。
# mv composer.phar /usr/local/bin/composer
このようにして、 php <Directorio>composer.phar代わりに、コンソールの作曲composerのみを作成することができます。
Windowsユーザーの場合はComposer-Setup.*.exe https://github.com/composer/windows-setup/releases/にいるGithubの公式Composer Repositoryの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に使用するデータベースを作成します。
ユーザーテーブルを作成します。
データベースができたので、Slim構成に追加する必要があります。このために、 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マッピング。
"autoload" : {
"psr-4" : {
"App\" : "src/"
}
}これで、アプリケーションモデルを作成する必要があります。 Slimは従来の方法でMVC設計パターン(モデル-vista-Controller)に従うことはありませんが、各コンポーネントの排他的なディレクトリを作成する必要があるため、 src/ File Explorerまたはsrcディレクトリのmkdir modelosコマンドを使用して、モデルのディレクトリを作成します。
私たちが知っているように、Slimには、デフォルトのオブジェクトと景気のあるマッピングのためのツールがありません。ただし、PHPで記述された別のフレームワークの1つを追加することができます。この場合、LaravelのEloquent 3を使用します。
雄弁に雄弁さを追加するには、まずコンポーザーにアプリケーションの依存関係に追加するように依頼する必要があります。
$ composer require illuminate/database " ~5.1 "次に、アプリケーションの依存関係噴射コンテナ(以下CID )にEloquentを追加します。 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 );
};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
}
}
} ここでは、2つの機能が例示されています。1つはすべての登録ユーザーを表示し、別の関数が特定のユーザーに表示される場所に表示されます。 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には、テーブルから要素を排除する3つの方法があります。1つ目は、その主キーが不明なモデルのインスタンスを排除することです。 delete関数を使用しますが、その欠点は、 delete呼び出す前にインスタンス全体を回復する必要があることです。 2つ目は、モデルの主要なキーが既知であると仮定すると、完全なインスタンスを回復することなくモデルを排除するdestroy関数を呼び出すことです。 3番目のオプションは相談によるものです。たとえば、 $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 );
}
Slimルートの実装はFastroute 5から構築され、最も一般的に使用されるHTTPメソッド、つまりget 、 post 、 put 、 delete 、パッチ、1つまたはすべてを処理してany() SLIMメソッドで生成できる方法で処理できる方法を提供します。さらに、 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で定義されているビューを応答して返す関数を呼び出すことです。
// 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リクエストを処理する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応答の本体の一部にすぎないことがわかっています。ただし、コンポーネントコンポーネントコンポーネントで提供でき、これらのコンポーネントのうち2つのコンポーネント、 TwigとPHP-Viewの実装を提供します。 Twigは、問題が少なくなり、一般的にはJinjaとDjangoのテンプレートに基づいているため、より明確な構造があるため、私は個人的に好みます。もちろん、すべてのスリムのように、コンポーネントの使用は味の問題であり、他のツールを処理して見解を生み出すことができます。
まず、他のユニットと同様に、 Composerを使用して小枝を追加します。
$ composer require slim/twig-view
注: Twigの代わりにPHP-Viewを使用する場合は、 slim/twig-view slim/php-viewのみに置き換えます。
Twigをインストールした後、アプリケーションのCIDに追加する必要があります。これにより、Slimはサービスの1つとして登録して使用できるようにする必要があります。
$ 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構造。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。 2016年9月25日、https://mariadb.com/blog/why-should-you-migrate-mysql-mariadbから取得。
2:プログラムで作曲家をインストールする方法?#。 (nd)。 2016年9月25日、https://getcomposer.org/doc/faqs/how-to-install-composer-programtical.mdから取得。
3:Eloquent:始めましょう - Laravel-ウェブ職人のPHPフレームワーク。 (nd)。 2016年9月29日、https://lavel.com/docs/5.1/eloquentから取得
4:敬意を表した効果的な検証。 2016年9月30日、https://websec.io/2013/04/01/effective-validation-with-respect.htmlから取得
5:N。(2016)。 FastTroute。 2016年10月12日、https://github.com/nikic/fastroteから取得
CodeCourse(2016、4月13日)。 https://www.youtube.com/playlist?ist=plfdthywgc_y90xrdq6mrww042aecから取得したスリム3の認証
ロブ・アレンのdevnotes。 (2016年7月28日)。 2016年11月8日、https://akrabat.com/category/slim-framework/から取得