Un marco PHP ligero y fácil de usar para crear sitios web y aplicaciones web.
La arquitectura de Sippy se parece sorprendente a Codeigniter, por lo que lo llamamos un marco de PHP ligero. Sin embargo, recuerde que debido a que Sippy es liviano, no incluye una gran parte de la funcionalidad que viene con CodeIgniter. Tal vez podamos agregar la funcionalidad de "plug-n-play" a través de complementos, controladores y bibliotecas. Para usar, elimine la "muestra" del archivo de configuración en la aplicación/config/sample.config.php, por lo que es la aplicación/config/config.php y complete sus datos de configuración.
Sippy se basa en el patrón de desarrollo del controlador de visión modelo-visión.
Los archivos específicos de su aplicación van en la carpeta "Aplicación" (no necesita tocar la carpeta del sistema). Dentro de la carpeta de aplicación hay carpetas para todas las entidades de aplicación específicas:
Controladores de configuración ayudantes de registros de modelos Vistas de complementos
Cuando Sippy carga archivos, supone que están en las carpetas correspondientes. Así que asegúrese de colocar sus archivos en las carpetas correctas.
Le recomendamos que use la carpeta "Activos" en la raíz para almacenar sus archivos de recursos estáticos (CSS, JS, etc.), sin embargo, puede colocarlos en cualquier lugar. También puede usar la función site_url() para ayudar a incluir archivos en su HTML o usar site_url('main/index') para ir a la página http://www.yoursite.com/main/index . Por ejemplo:
< link rel =" stylesheet " href =" <?php echo site_url(); ?>assets/css/style.css " type =" text/css " media =" screen " />Todas las clases en Sippy usan nombres de pascalcase. Los nombres de archivo asociados deben ser los mismos, excepto todos los minúsculas. Entonces, por ejemplo, la clase MainClass tendría el nombre de archivo MainClass.php. Los subrayadores en las clases también deben incluirse en los nombres de archivos.
Por defecto, las URL en Sippy están diseñadas para ser motores de búsqueda y amigables para los humanos. En lugar de utilizar el enfoque estándar de "cadena de consulta" para las URL que es sinónimo de sistemas dinámicos, Sippy utiliza un enfoque basado en segmentos:
example.com/class/function/param por defecto index.php está oculto en la URL. Esto se realiza utilizando el archivo .htaccess en el directorio raíz.
Simplemente coloque archivos en su proyecto para una fácil autenticación: https://github.com/trafticinc/sippy-auth
Los controladores son la fuerza impulsora de una aplicación Sippy. Como puede ver en la estructura de la URL, los segmentos de la URL se asignan a una clase y función. Estas clases son controladores almacenados en el directorio "Aplicación/controlador". Entonces, por ejemplo, la URL ...
example.com/main/login ... se asignaría al siguiente controlador con el nombre de archivo main.php:
<?php
class Main extends Sippy_controller {
function index () {
// This is the default function (i.e. no function is set in the URL)
}
function login () {
echo ' Hello World! ' ;
}
}... y la salida sería "¡Hola mundo!".
El controlador predeterminado y el controlador de error se pueden configurar en Application/config/config.php
Tenga en cuenta que si necesita declarar un constructor, también debe llamar al constructor principal como:
<?php
class Example extends Sippy_controller {
public function __construct ()
{
parent :: __construct ();
// Your own constructor code
}
}
?>Hay varias funciones a ayuda de ayuda que también se pueden usar en controladores. La mayoría de estas funciones toman el nombre de parámetro $ de la clase correspondiente:
Información de registro de errores e depuración
Luego puede agregar este código a su controlador para su depuración.
log_message('error','Your log message');log_message('debug','Your log message');Ejemplo de validación del controlador y protección de token CSRF y error de Flash/Success Mensajes: #Controller `` `requerir System_Dir. '/Validation.php'; ###### - Clase - Validación $ protegida;
function __constructor() {
$this->validation = new Validation;
}
$data['messSuccess'] = $this->flash->message('success');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($_POST['csrf'] === $_SESSION['csrf_token']) {
$validator = $this->validation->go($_POST, [
'email' => 'required|min:5',
'password' => 'required',
]);
if (count($validator) > 0) {
$data['errors'] = $validator;
} else {
// ** Do Stuff **
$this->flash->message('success','Your flash message here');
$this->redirect('auth/login');
}
}
}
```
#vista
<h1>Login</h1>
<?php
if (isset($messSuccess)) {
$this->success_block($messSuccess);
}
if (isset($errors)) {
$this->error_block($errors);
}
?>
<form method="post" action="<?php echo site_url('auth/login'); ?>">
<input type="hidden" name="csrf" value="<?php echo $this->security->generate_csrf_token(); ?>"/>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" name="email" class="form-control" id="email" placeholder="Email">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="password" class="form-control" id="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Login</button>
</form>
En Sippy, una vista es simplemente una página web. Pueden contener todo lo que incluiría una página web normal. Las vistas casi siempre están cargadas por controladores. Entonces, por ejemplo, si tenía una vista llamada main_view.php que contenía el siguiente HTML:
<html>
<head>
<title>My Site</title>
</head>
<body>
<h1>Welcome to my Site!</h1>
</body>
</html>
. . . you would load it in a controller by doing the following:
// Controller file...
<?php
class Main extends Sippy_controller {
function index ()
{
$ template = $ this -> View ( ' main_view ' );
$ template -> render ();
}
} La clase View tiene una función Helper llamada set($key, $val) que le permite pasar variables desde el controlador a la vista.
$ template = $ this -> View ( ' main_view ' );
$ template -> set ( ' someval ' , 17 );
$ template -> render ();... Entonces, en la vista, podrías hacer:
<?php echo $someval; ?>
... y la salida sería 17. Cualquier tipo de variable PHP se puede pasar a una vista de esta manera: matrices, etc.
O
En el controlador, puede llamar a sus puntos de vista con datos que luego estarán disponibles en la vista. Esto se puede lograr a las formas. En el controlador ...
$ header = array ( ' title ' => ' My Title ' , ' descr ' => ' Login Page ' , ' keywords ' => ' login,page,mysample ' );
$ template = $ this -> View ( ' main/index ' , $ d );En la vista, se puede acceder a estos artículos de matriz como ...
<?php echo $title; ?>
Que mostrará el texto "mi título", y así sucesivamente para el resto de la matriz.
La forma preferida de acceder a los datos en las vistas es nombrar la matriz de datos y acceder a ella en el controlador como ...
$ data [ ' body ' ] = " Hello World " ;
$ data [ ' heading ' ] = array ( ' title ' => ' My Title ' , ' descr ' => ' Login Page ' , ' keywords ' => ' login,page,mysample ' );
$ template = $ this -> View ( ' main/index ' , $ data );Entonces en la vista ...
//body can be accessed
<?php echo $ body ; ?>
//heading can be accessed as an array
<?php
foreach ( $ heading as $ head ) {
echo $ head [ ' title ' ];
. . . etc.
}
?> En los modelos Sippy se encuentran clases que tratan con datos (generalmente de una base de datos), se proporciona una base de datos de muestra, cargue el archivo testdb.sql en secel pro o su GUI de elección SQL. Por ejemplo:
<?php
class Example_model extends Sippy_model {
public function getSomething ( $ id )
{
$ id = $ this -> escape ( $ id );
$ result = $ this -> query ( " SELECT * FROM something WHERE id=' { $ id } ' " );
return $ result ;
}
}
?>... Entonces en un controlador harías:
function index ()
{
$ example = $ this -> Model ( ' Example_model ' );
$ data [ ' something ' ] = $ example -> getSomething ( $ id );
$ template = $ this -> View ( ' main_view ' , $ data );
$ template -> render ();
} Ahora los resultados de la consulta de su base de datos estarían disponibles en su opinión en $ SomeVal. La conexión a la base de datos MySQL se puede realizar en su archivo config/config.php (recuerde cambiar el nombre del archivo sample.config.php ):
$ config [ ' db_host ' ] = '' ; // Database host (e.g. localhost)
$ config [ ' db_name ' ] = '' ; // Database name
$ config [ ' db_username ' ] = '' ; // Database username
$ config [ ' db_password ' ] = '' ; // Database passwordHay varias funciones auxiliares que también se pueden usar en modelos:
query($query) - devuelve una matriz de resultados de una consultagetrow($query) - devuelve una fila de la consultagetrowobj($query) - devuelve una fila como objetoexecute($query) : devuelve el resultado directo de una consultaescape($string) - Strings de escape antes de usarlas en consultasinsert($table, $dataArray) : inserte en una tabla con una matrizHay un horno en HTML Helper que puede usar en controladores y vistas a través de $ this-> html-> esc () y más, en su URL, cuando ejecuta Sippy, vaya a URL Main/Test para ver la funcionalidad disponible.
Hay dos tipos de recursos adicionales que puede usar en Sippy.
Los ayudantes son clases que puede usar que no caen en la categoría de "controladores". Por lo general, serán clases que proporcionan funcionalidad adicional que puede usar en sus controladores. Sippy viene con clases de ayuda (session_helper y url_helper) que son ejemplos de cómo usar ayudantes.
Los complementos son literalmente cualquier archivo PHP y pueden proporcionar cualquier funcionalidad que desee. Al cargar un complemento, simplemente incluye el archivo PHP en la carpeta "complementos". Esto puede ser útil si desea usar bibliotecas de terceros en su aplicación Sippy.
Cómo usar, en el controlador ...
protected $sess;
public function __construct() {
parent::__construct();
$this->Helper('Session_helper');
$this->sess = new Session_helper;
}
public function sample() {
$this->sess->set('email', '[email protected]'); //set session variable
$this->sess->get('email'); //get session variable
$this->sess->destroy(); //destroy session, good for logout method
}
Cómo usar, en el controlador ...
public function __construct() {
parent::__construct();
$this->Plugin('Mailer');
}
public function sample() {
$send = Mailer::make()
->setTo('[email protected]', 'ToPerson')
->setFrom('[email protected]', 'Sippy')
->setSubject('Hello World Test')
->setMessage('Test message form sippy')
->setHtml()
->setWrap(100)
->send();
}
Para extender a Sippy, hay una opción para agregar "ganchos". Los ganchos le permiten extender todo el marco y/o agregar funcionalidad. Para activar 'Hooks', vaya a su archivo config.php y habilitelo. Luego, en el archivo config/ganch.php, agregue su función de gancho. Los ganchos son globales y hay tres de ellos; before_system (se carga antes de las llamadas al sistema), before_controller (se carga antes de los controladores) y after_controller (carga después de los controladores). Aquí hay un ejemplo ...
// in hooks.php file
$ hook [ ' before_system ' ] = function () {
echo " hello world " ;
};Este gancho cargará globalmente esta función que dice "hola mundo". Como solo puede cargar un gancho una vez, si tiene más de una función para llamar, puede apilarlos así ...
//... your functions ... function func1() {...do stuff...}
$ hook [ ' before_system ' ] = function () {
func1 ();
func2 ();
func3 ();
};$ php bin/sippy.php [Opciones]
intentar
$ php bin/sippy.php -help