Codeigniter 4馃敟 [21.- rutas]

en este tutorial vamos a trabajar con las rutar y para los que no sepan una ruta es algo asi http://localhost/ci4/nuevo osea en otras palabras es una url personalizada.
Codigo en github.com: https://github.com/programadornovato/codeigniter4/commit/d23b46c41d21e7eb95dc378c4bde65c030957a2d

//app/Config/App.php 
<?php namespace Config;

use CodeIgniter\Config\BaseConfig;

class App extends BaseConfig
{

 /*
 |--------------------------------------------------------------------------
 | Base Site URL
 |--------------------------------------------------------------------------
 |
 | URL to your CodeIgniter root. Typically this will be your base URL,
 | WITH a trailing slash:
 |
 | http://example.com/
 |
 | If this is not set then CodeIgniter will try guess the protocol, domain
 | and path to your installation. However, you should always configure this
 | explicitly and never rely on auto-guessing, especially in production
 | environments.
 |
 */ public $baseURL = 'http://localhost/ci4/';

 /*
 |--------------------------------------------------------------------------
 | Index File
 |--------------------------------------------------------------------------
 |
 | Typically this will be your index.php file, unless you've renamed it to
 | something else. If you are using mod_rewrite to remove the page set this
 | variable so that it is blank.
 |
 */ public $indexPage = '';

 /*
 |--------------------------------------------------------------------------
 | URI PROTOCOL
 |--------------------------------------------------------------------------
 |
 | This item determines which getServer global should be used to retrieve the
 | URI string.  The default setting of 'REQUEST_URI' works for most servers.
 | If your links do not seem to work, try one of the other delicious flavors:
 |
 | 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
 | 'QUERY_STRING'   Uses $_SERVER['QUERY_STRING']
 | 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
 |
 | WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
 */ public $uriProtocol = 'REQUEST_URI';

 /*
 |--------------------------------------------------------------------------
 | Default Locale
 |--------------------------------------------------------------------------
 |
 | The Locale roughly represents the language and location that your visitor
 | is viewing the site from. It affects the language strings and other
 | strings (like currency markers, numbers, etc), that your program
 | should run under for this request.
 |
 */ public $defaultLocale = 'en';

 /*
 |--------------------------------------------------------------------------
 | Negotiate Locale
 |--------------------------------------------------------------------------
 |
 | If true, the current Request object will automatically determine the
 | language to use based on the value of the Accept-Language header.
 |
 | If false, no automatic detection will be performed.
 |
 */ public $negotiateLocale = false;

 /*
 |--------------------------------------------------------------------------
 | Supported Locales
 |--------------------------------------------------------------------------
 |
 | If $negotiateLocale is true, this array lists the locales supported
 | by the application in descending order of priority. If no match is
 | found, the first locale will be used.
 |
 */ public $supportedLocales = ['en'];

 /*
 |--------------------------------------------------------------------------
 | Application Timezone
 |--------------------------------------------------------------------------
 |
 | The default timezone that will be used in your application to display
 | dates with the date helper, and can be retrieved through app_timezone()
 |
 */ public $appTimezone = 'America/Chicago';

 /*
 |--------------------------------------------------------------------------
 | Default Character Set
 |--------------------------------------------------------------------------
 |
 | This determines which character set is used by default in various methods
 | that require a character set to be provided.
 |
 | See http://php.net/htmlspecialchars for a list of supported charsets.
 |
 */ public $charset = 'UTF-8';

 /*
 |--------------------------------------------------------------------------
 | URI PROTOCOL
 |--------------------------------------------------------------------------
 |
 | If true, this will force every request made to this application to be
 | made via a secure connection (HTTPS). If the incoming request is not
 | secure, the user will be redirected to a secure version of the page
 | and the HTTP Strict Transport Security header will be set.
 */ public $forceGlobalSecureRequests = false;

 /*
 |--------------------------------------------------------------------------
 | Session Variables
 |--------------------------------------------------------------------------
 |
 | 'sessionDriver'
 |
 | The storage driver to use: files, database, redis, memcached
 |       - CodeIgniter\Session\Handlers\FileHandler
 |       - CodeIgniter\Session\Handlers\DatabaseHandler
 |       - CodeIgniter\Session\Handlers\MemcachedHandler
 |       - CodeIgniter\Session\Handlers\RedisHandler
 |
 | 'sessionCookieName'
 |
 | The session cookie name, must contain only [0-9a-z_-] characters
 |
 | 'sessionExpiration'
 |
 | The number of SECONDS you want the session to last.
 | Setting to 0 (zero) means expire when the browser is closed.
 |
 | 'sessionSavePath'
 |
 | The location to save sessions to, driver dependent.
 |
 | For the 'files' driver, it's a path to a writable directory.
 | WARNING: Only absolute paths are supported!
 |
 | For the 'database' driver, it's a table name.
 | Please read up the manual for the format with other session drivers.
 |
 | IMPORTANT: You are REQUIRED to set a valid save path!
 |
 | 'sessionMatchIP'
 |
 | Whether to match the user's IP address when reading the session data.
 |
 | WARNING: If you're using the database driver, don't forget to update
 |          your session table's PRIMARY KEY when changing this setting.
 |
 | 'sessionTimeToUpdate'
 |
 | How many seconds between CI regenerating the session ID.
 |
 | 'sessionRegenerateDestroy'
 |
 | Whether to destroy session data associated with the old session ID
 | when auto-regenerating the session ID. When set to FALSE, the data
 | will be later deleted by the garbage collector.
 |
 | Other session cookie settings are shared with the rest of the application,
 | except for 'cookie_prefix' and 'cookie_httponly', which are ignored here.
 |
 */ public $sessionDriver            = 'CodeIgniter\Session\Handlers\FileHandler';
 public $sessionCookieName        = 'ci_session';
 public $sessionExpiration        = 7200;
 public $sessionSavePath          = WRITEPATH . 'session';
 public $sessionMatchIP           = false;
 public $sessionTimeToUpdate      = 300;
 public $sessionRegenerateDestroy = false;

 /*
 |--------------------------------------------------------------------------
 | Cookie Related Variables
 |--------------------------------------------------------------------------
 |
 | 'cookiePrefix'   = Set a cookie name prefix if you need to avoid collisions
 | 'cookieDomain'   = Set to .your-domain.com for site-wide cookies
 | 'cookiePath'     = Typically will be a forward slash
 | 'cookieSecure'   = Cookie will only be set if a secure HTTPS connection exists.
 | 'cookieHTTPOnly' = Cookie will only be accessible via HTTP(S) (no javascript)
 |
 | Note: These settings (with the exception of 'cookie_prefix' and
 |       'cookie_httponly') will also affect sessions.
 |
 */ public $cookiePrefix   = '';
 public $cookieDomain   = '';
 public $cookiePath     = '/';
 public $cookieSecure   = false;
 public $cookieHTTPOnly = false;

 /*
 |--------------------------------------------------------------------------
 | Reverse Proxy IPs
 |--------------------------------------------------------------------------
 |
 | If your server is behind a reverse proxy, you must whitelist the proxy
 | IP addresses from which CodeIgniter should trust headers such as
 | HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify
 | the visitor's IP address.
 |
 | You can use both an array or a comma-separated list of proxy addresses,
 | as well as specifying whole subnets. Here are a few examples:
 |
 | Comma-separated: '10.0.1.200,192.168.5.0/24'
 | Array:  array('10.0.1.200', '192.168.5.0/24')
 */ public $proxyIPs = '';

 /*
 |--------------------------------------------------------------------------
 | Cross Site Request Forgery
 |--------------------------------------------------------------------------
 | Enables a CSRF cookie token to be set. When set to TRUE, token will be
 | checked on a submitted form. If you are accepting user data, it is strongly
 | recommended CSRF protection be enabled.
 |
 | CSRFTokenName   = The token name
 | CSRFCookieName  = The cookie name
 | CSRFExpire      = The number in seconds the token should expire.
 | CSRFRegenerate  = Regenerate token on every submission
 | CSRFRedirect    = Redirect to previous page with error on failure
 */ public $CSRFTokenName  = 'csrf_test_name';
 public $CSRFCookieName = 'csrf_cookie_name';
 public $CSRFExpire     = 7200;
 public $CSRFRegenerate = true;
 public $CSRFRedirect   = true;

 /*
 |--------------------------------------------------------------------------
 | Content Security Policy
 |--------------------------------------------------------------------------
 | Enables the Response's Content Secure Policy to restrict the sources that
 | can be used for images, scripts, CSS files, audio, video, etc. If enabled,
 | the Response object will populate default values for the policy from the
 | ContentSecurityPolicy.php file. Controllers can always add to those
 | restrictions at run time.
 |
 | For a better understanding of CSP, see these documents:
 |   - http://www.html5rocks.com/en/tutorials/security/content-security-policy/
 |   - http://www.w3.org/TR/CSP/
 */ public $CSPEnabled = false;

}






//app/Config/Routes.php
<?php namespace Config;

/**
 * --------------------------------------------------------------------
 * URI Routing
 * --------------------------------------------------------------------
 * This file lets you re-map URI requests to specific controller functions.
 *
 * Typically there is a one-to-one relationship between a URL string
 * and its corresponding controller class/method. The segments in a
 * URL normally follow this pattern:
 *
 *    example.com/class/method/id
 *
 * In some instances, however, you may want to remap this relationship
 * so that a different class/function is called than the one
 * corresponding to the URL.
 */
// Create a new instance of our RouteCollection class.
$routes = Services::routes(true);

// Load the system's routing file first, so that the app and ENVIRONMENT
// can override as needed.
if (file_exists(SYSTEMPATH . 'Config/Routes.php'))
{
 require SYSTEMPATH . 'Config/Routes.php';
}

/**
 * --------------------------------------------------------------------
 * Router Setup
 * --------------------------------------------------------------------
 * The RouteCollection object allows you to modify the way that the
 * Router works, by acting as a holder for it's configuration settings.
 * The following methods can be called on the object to modify
 * the default operations.
 *
 *    $routes->defaultNamespace()
 *
 * Modifies the namespace that is added to a controller if it doesn't
 * already have one. By default this is the global namespace (\).
 *
 *    $routes->defaultController()
 *
 * Changes the name of the class used as a controller when the route
 * points to a folder instead of a class.
 *
 *    $routes->defaultMethod()
 *
 * Assigns the method inside the controller that is ran when the
 * Router is unable to determine the appropriate method to run.
 *
 *    $routes->setAutoRoute()
 *
 * Determines whether the Router will attempt to match URIs to
 * Controllers when no specific route has been defined. If false,
 * only routes that have been defined here will be available.
 */$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

/**
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */
// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Micontrolador::index');
$routes->get('/nuevo', 'Micontrolador::formulario');
$routes->get('/empleados/nuevo', 'Micontrolador::formulario');

/**
 * --------------------------------------------------------------------
 * Additional Routing
 * --------------------------------------------------------------------
 *
 * There will often be times that you need additional routing and you
 * need to it be able to override any defaults in this file. Environment
 * based routes is one such time. require() additional route files here
 * to make that happen.
 *
 * You will have access to the $routes object within that file without
 * needing to reload it.
 */if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'))
{
 require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}





//app/Controllers/Home.php
<?php namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\UserModel;

class Home extends BaseController
{
 public function __construct(){
  helper('form');
 }
 public function guarda(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $data=array(
   'name'=>$request->getPostGet('name'),
   'email'=>$request->getPostGet('email'),
  );
  if($request->getPostGet('id')){
   $data['id']=$request->getPostGet('id');
  }
  if($userModel->save($data)===false){
   var_dump($userModel->errors());
  }
  if($request->getPostGet('id')){
   $users=$userModel->find([$request->getPostGet('id')]);
   $users=array('users'=>$users);
   $estructura=view('estructura/header').view('estructura/formulario',$users); 
  }
  else{
   $users=$userModel->findAll();
   $users=array('users'=>$users);
   $estructura=view('estructura/header').view('estructura/body',$users);
  }
  return $estructura;

 }
 public function editar(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $id=$request->getPostGet('id');
  $users=$userModel->find([$id]);
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/formulario',$users);
  return $estructura;

 }
 public function borrar(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $id=$request->getPostGet('id');
  $userModel->delete($id);
  $users=$userModel->findAll();
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/body',$users);
  return $estructura;

 }

 public function formulario(){
  $estructura=view('estructura/header').view('estructura/formulario');
  return $estructura;
 }
 public function index()
 {
  echo "Home";
  $userModel=new UserModel($db);
  //$users=$userModel->find([1,2]);
  //$users=$userModel->findAll();
  //$users=$userModel->where('name','maria')->findAll();
  //$users=$userModel->findAll(2,3);
  //$users=$userModel->withDeleted()->findAll();
  /*
  $data=[
   'name'=>"programador1",
   'email'=>"programador1@hotmail.com"
  ];
  $userModel->insert($data);
  
  $data=[
   'name'=>"programador2",
   'email'=>"programador2@hotmail.com"
  ];
  $userModel->update(10,$data);
  
  $data=[
   'name'=>"yo"
  ];
  $userModel->update([2,3],$data);
  
  $userModel->whereIn('id',[4,5,10])
  ->set(['name'=>'yo tambien'])
  ->update();
  
  $data=[
   'name'=>"programador11",
   'email'=>"programador11@hotmail.com"
  ];
  $userModel->save($data);
  
  $data=[
   'id'=>"12",
   'name'=>"programador yo tambien",
   'email'=>"programadorto@hotmail.com"
  ];
  $userModel->save($data);
  */  //$userModel->delete([2,4,5]);
  //$userModel->where('id',10)->delete();
  //$userModel->purgeDeleted();
  /*
  $data=[
   'name'=>"programadorvalido nuevo 2",
   'email'=>"programadornuevo2@hotmail.com"
  ];
  if($userModel->save($data)===false){
   var_dump($userModel->errors());
  }
  */  /*
  $users=$userModel->asArray()->where('name','programador11')
  ->orderBy('id','asc')
  ->findAll();
  var_dump($users);
  */  $users=$userModel->findAll();
  
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/body',$users);
  return $estructura;
  
 }

 //--------------------------------------------------------------------

}







//app/Controllers/Micontrolador.php
<?php namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\UserModel;

class Micontrolador extends BaseController
{
 public function __construct(){
  helper('form');
 }
 public function guarda(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $data=array(
   'name'=>$request->getPostGet('name'),
   'email'=>$request->getPostGet('email'),
  );
  if($request->getPostGet('id')){
   $data['id']=$request->getPostGet('id');
  }
  if($userModel->save($data)===false){
   var_dump($userModel->errors());
  }
  if($request->getPostGet('id')){
   $users=$userModel->find([$request->getPostGet('id')]);
   $users=array('users'=>$users);
   $estructura=view('estructura/header').view('estructura/formulario',$users); 
  }
  else{
   $users=$userModel->findAll();
   $users=array('users'=>$users);
   $estructura=view('estructura/header').view('estructura/body',$users);
  }
  return $estructura;

 }
 public function editar(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $id=$request->getPostGet('id');
  $users=$userModel->find([$id]);
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/formulario',$users);
  return $estructura;

 }
 public function borrar(){
  $userModel=new UserModel($db);
  $request= \Config\Services::request();
  $id=$request->getPostGet('id');
  $userModel->delete($id);
  $users=$userModel->findAll();
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/body',$users);
  return $estructura;

 }

 public function formulario(){
  $estructura=view('estructura/header').view('estructura/formulario');
  return $estructura;
 }
 public function index()
 {
  echo "Micontrolador";
  $userModel=new UserModel($db);
  //$users=$userModel->find([1,2]);
  //$users=$userModel->findAll();
  //$users=$userModel->where('name','maria')->findAll();
  //$users=$userModel->findAll(2,3);
  //$users=$userModel->withDeleted()->findAll();
  /*
  $data=[
   'name'=>"programador1",
   'email'=>"programador1@hotmail.com"
  ];
  $userModel->insert($data);
  
  $data=[
   'name'=>"programador2",
   'email'=>"programador2@hotmail.com"
  ];
  $userModel->update(10,$data);
  
  $data=[
   'name'=>"yo"
  ];
  $userModel->update([2,3],$data);
  
  $userModel->whereIn('id',[4,5,10])
  ->set(['name'=>'yo tambien'])
  ->update();
  
  $data=[
   'name'=>"programador11",
   'email'=>"programador11@hotmail.com"
  ];
  $userModel->save($data);
  
  $data=[
   'id'=>"12",
   'name'=>"programador yo tambien",
   'email'=>"programadorto@hotmail.com"
  ];
  $userModel->save($data);
  */  //$userModel->delete([2,4,5]);
  //$userModel->where('id',10)->delete();
  //$userModel->purgeDeleted();
  /*
  $data=[
   'name'=>"programadorvalido nuevo 2",
   'email'=>"programadornuevo2@hotmail.com"
  ];
  if($userModel->save($data)===false){
   var_dump($userModel->errors());
  }
  */  /*
  $users=$userModel->asArray()->where('name','programador11')
  ->orderBy('id','asc')
  ->findAll();
  var_dump($users);
  */  $users=$userModel->findAll();
  
  $users=array('users'=>$users);
  $estructura=view('estructura/header').view('estructura/body',$users);
  return $estructura;
  
 }

 //--------------------------------------------------------------------

}







//app/Views/estructura/body.php
<body>
<div class="container">
    <div class="row">
        <a href="<?php echo base_url(); ?>nuevo" class="btn btn-info" role="button" >Nuevo</a>
    </div>
    <div class="row">

    
        <table  class="table">
        <tr>
        <th scope="col">id</th>
        <th scope="col">name</th>
        <th scope="col">email</th>
        <th scope="col">deleted</th>
        <th scope="col">acciones</th>
        </tr>
        <?php
        foreach($users as $user){
            echo "<tr  scope='row' >";
            echo "<td>".$user['id']."</td>";
            echo "<td>".$user['name']."</td>";
            echo "<td>".$user['email']."</td>";
            echo "<td>".$user['deleted']."</td>";
            echo "<td>";
            ?>
            <a href="<?php echo base_url(); ?>micontrolador/editar?id=<?php echo $user['id']; ?>" class="btn btn-warning" role="button" ><i class="fa fa-pencil-square-o"></i></a>
            <a href="<?php echo base_url(); ?>micontrolador/borrar?id=<?php echo $user['id']; ?>" class="btn btn-danger" role="button" ><i class="fa fa-trash"></i></a>
            <?php
            echo "</td>";
            echo "</tr>";
        }
        ?>
        </table>
    </div>
</div>
</body>
</html>








//app/Views/estructura/formulario.php
<div class="container">
<?php
echo form_open('/Micontrolador/guarda');
if(isset($users)){
    $name=$users[0]['name'];
    $email=$users[0]['email'];
}
else{
    $name="";
    $email="";
}
?>
<div class="form-group">
<?php
echo form_label('Nombre','name');
echo form_input(array('name'=>'name','placeholder'=>'Nombre','class'=>'form-control','value'=>$name));
echo "<br>";
echo form_label('Email','email');
echo form_input(array('name'=>'email','placeholder'=>'Email','class'=>'form-control','value'=>$email));
echo "<br>";
echo form_submit('guarda','Guardar','class="btn btn-primary"');
if(isset($users)){
    echo form_hidden('id',$users[0]['id']);
}

?>
</div>
<?php

echo form_close();
?>
</div>


Guia oficial: https://codeigniter4.github.io/userguide/incoming/routing.html

.htaccess
RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] #Codeigniter4 #php7 #backend #Codeigniter #php .
? Esta lista de reproducci贸n: https://www.youtube.com/playlist?list=PLCTD_CpMeEKTFN5TDeOP-wP_hU0_9VoWg

Codeigniter 4? [21.- rutas]

#Codeigniter4 #php7 #backend #Codeigniter #php .
? Esta lista de reproducci贸n: https://www.youtube.com/playlist?list=PLCTD_CpMeEKTFN5TDeOP-wP_hU0_9VoWg
.
Codigos en gdrive: https://drive.google.com/file/d/1awbG6jI40IO0N68fgjLUwNFpsTC3wIHj/view?usp=sharing .
Gracias por apoyar este canal: https://www.patreon.com/programadornovato?fan_landing=true .
? Facebook: https://facebook.com/ProgramadorNovatoOficial
? Twitter: https://twitter.com/programadornova
? Linkedin: https://www.linkedin.com/in/programadornovato/
? Instagram: https://www.instagram.com/programadornovato/

Eugenio Chaparro

Entradas recientes

馃煝Editar c贸digo de un m贸dulo en Dolibarr [04]

馃煝Editar c贸digo de un m贸dulo en Dolibarr [04]

En este tutorial vamos editar el c贸digo de nuestro m贸dulo personas para poder personalizar algunas…

3 semanas hace
馃煝Crear un sub_m贸dulo en Dolibarr [03]

馃煝Crear un sub_m贸dulo en Dolibarr [03]

En este tutorial vamos a crear un sub m贸dulo llamado seguridad que ser谩 muy parecido…

3 semanas hace
馃煝Modificar un m贸dulo en Dolibarr [02]

馃煝Modificar un m贸dulo en Dolibarr [02]

En este tutorial aprenderemos a editar el objeto personas del modulo persona que creamos en…

3 semanas hace
馃煝Constructor de m贸dulos en Dolibarr

馃煝Constructor de m贸dulos en Dolibarr

Como mencionamos anteriormente Dolibarr es un proyecto realizado sobre la base de una pol铆tica clara:…

3 semanas hace
馃煝Tickets en Dolibarr [19]

馃煝Tickets en Dolibarr [19]

Los ticket en dolibarr nos ayudan a comunicar inconveniente en nuestros productos y servicios dentro…

3 semanas hace
馃煝Agenda en Dolibarr [18]

馃煝Agenda en Dolibarr [18]

Las agendas en dolibarr nos ayudan a ver las actividades realizadas en proceso y por…

3 semanas hace