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'=>"[email protected]"
];
$userModel->insert($data);
$data=[
'name'=>"programador2",
'email'=>"[email protected]"
];
$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'=>"[email protected]"
];
$userModel->save($data);
$data=[
'id'=>"12",
'name'=>"programador yo tambien",
'email'=>"[email protected]"
];
$userModel->save($data);
*/
//$userModel->delete([2,4,5]);
//$userModel->where('id',10)->delete();
//$userModel->purgeDeleted();
/*
$data=[
'name'=>"programadorvalido nuevo 2",
'email'=>"[email protected]"
];
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'=>"[email protected]"
];
$userModel->insert($data);
$data=[
'name'=>"programador2",
'email'=>"[email protected]"
];
$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'=>"[email protected]"
];
$userModel->save($data);
$data=[
'id'=>"12",
'name'=>"programador yo tambien",
'email'=>"[email protected]"
];
$userModel->save($data);
*/
//$userModel->delete([2,4,5]);
//$userModel->where('id',10)->delete();
//$userModel->purgeDeleted();
/*
$data=[
'name'=>"programadorvalido nuevo 2",
'email'=>"[email protected]"
];
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
#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/