0.版本差异
Codeigniter 4 与Codeigniter 3差异比较大,比如v3中的
$this->load->view('hello');
就会报错。
另外,开发过程中,建议开启debug模式,发布时可以改回去,
app/Config/Boot/production.php中的
ini_set('display_errors', '1');
这样就不会出现“Whoops! We seem to have hit a snag. Please try again later…”而是有用的bug信息了。
1.模板
模板的概念源远流长,其目的在于把网页分成若干部分,把不变的部分和变动的部分区分开来,便于管理。其实,PHP语言本身的特性决定了模板其实是个多余的鸡肋,虽然laravel,phalcon等也有相应的引擎模板,大家也在用,但是没有模板引擎照样可以换新天。
2.拼接模板的例子
创建app/controllers/ViewTemplate.php。这里有个小问题:之所以用echo好几个view而非return,因为return只有一次。
<?php namespace App\Controllers;
class ViewTemplate extends BaseController
{
public function index()
{
// return view('welcome_message');
echo view('header');
echo view('main');
echo view('footer');
}
}
分别创建app/views/header, app/views/main.php, app/views/footer.php
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<header>I am header</header>
<div>
I am body
</div>
<div>I am footer</div>
</body>
</html>
效果如下:
3.一个form展示
Codeigniter默认并没有安装许多库,这里就需要设置一下。有两种方式引入helper,这里用一种:
helper('form');
这里只做一个演示,具体的内容还是查看官方文档为好。其具体的参数比较统一,第一个对应html的name,之后的是value等参数。
<?php namespace App\Controllers;
class MyHelper extends BaseController
{
public function index()
{
helper('form');
echo form_open('MyHelper/user',array('id'=>'xyz','class'=>'xyz'));
echo form_input('name','','placeholder = "Enter your name"');
echo form_input('myname','',array('id'=>'myid','class'=>'myclass'));
echo form_textarea('myTextArea','',array('class'=>'myclass'));
echo form_password('mypassword','',array('class'=>'myclass'));
echo form_upload('fileName','','');
$myvar = array(
'1'=>1,'2'=>2,'3'=>3,'4'=>4
);
echo form_dropdown('myDropdown',$myvar,'4','');
echo form_label('Enter your name','gi9');
echo form_hidden('xyz','my value','');
echo form_multiselect('abdc',$myvar);
echo form_checkbox('gender','teagy',true,'');
echo form_radio('a34','xygze',true);
// echo form_open_multipart();
echo form_submit('Send Now','Submit Now','');
echo form_close();
}
public function user()
{
echo 'working now';
}
//--------------------------------------------------------------------
public function hello()
{
echo '<h1>Hello codeigniter 4-0-3<h1>';
}
}
建议点开html源代码查看其具体的指代。关键在于open_form中的指代的路径曾经给我惹了点麻烦。
点击submit now按钮,
后记:前面提到模板问题对PHP而言显得很尴尬。具体是想这样的写法亦或是html源代码的写法,大家自己斟酌。
4.模板的继承
其他的模板引擎,比如twig,smarty,blade都支持模板继承,在这里仅进行一下演示。关于模板的问题,请参考上面的后记。
<?php namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
// return view('welcome_message');
//echo '<h1>Hello Codeigniter 4.0.3<h1>';
//echo view('home');
return view('site/services');
}
//--------------------------------------------------------------------
public function hello()
{
echo '<h1>Hello codeigniter 4-0-3<h1>';
}
public function newUser()
{
$request = \Config\Services::request();
echo $request->getVar('email');
}
}
app/views/layout/main.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to my site</title>
</head>
<body>
<header>head here</header>
<?= $this->renderSection('content');?>
<footer>
<?php echo $this->renderSection('footer');?>
</footer>
</body>
</html>
app/viewssite/services.php
<?= $this->extend('layout/main');?>
<?= $this->section('content');?>
<h1>欢迎来到我的网站</h1>
<?= $this->endSection();?>
<?= $this->section('footer');?>
<h1>我是脚</h1>
<?= $this->endSection();?>
需要引入css时,打开helper(‘html’);
<?= script_tag("public/js/script.js")?>
<?= link_tag("public/js/style.css")?>
补充:也可以导入部分页面,
<?php $this->include('文件路径');?>