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
#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/
Ave que vuela, a la cazuela.