跟随:CodeIgniter from Scratch: The Calendar Library
早期版本的代码:
class Mycal extends CI_Controller
{
function display($month, $year) {
$conf = array(
'start_day' => 'Monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'mycal/display'
);
$this->load->library('calendar', $conf);
print $this->calendar->generate($month, $year);
}
}
生成这些错误:
遇到PHP错误
严重性:警告
消息:Mycal :: display()缺少参数1
文件名:controllers / mycal.php
行号:4遇到PHP错误
严重性:警告
消息:Mycal :: display()缺少参数2
文件名:controllers / mycal.php
行号:4遇到PHP错误
严重性:注意
消息:未定义的变量:年
文件名:controllers / mycal.php
行号:16遇到PHP错误
严重性:注意
消息:未定义的变量:月
文件名:controllers / mycal.php
行号:16
我更新到以下内容:
class Mycal extends CI_Controller {
function display($year = null, $month = null) {
$year = $this->uri->segment(3);
$month = $this->uri->segment(4);
$conf = array(
'start_day' => 'Monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'mycal/display/'
);
$this->load->library('calendar', $conf);
print $this->calendar->generate($year, $month);
}
}
它可以按预期工作,但它是否遵循CI的最佳实践?
答案 0 :(得分:1)
调用display
函数时,$year
和$month
将被设置为URI段(或null)。此处不需要$this->uri->segment
来电。
同样echo
略快于print
(according to this)。
function display($year = null, $month = null) {
$conf = array(
'start_day' => 'Monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'mycal/display/'
);
$this->load->library('calendar', $conf);
echo $this->calendar->generate($year, $month);
}
答案 1 :(得分:1)
建立Rocket的答案,如果未在网址中传递,则需要设置年份和月份。
通过执行$year = null, $month = null
作为参数,这意味着如果没有传递参数,$ year将等于null,$ month将等于null,但如果参数在url中传递,$ year将等于第一个参数和$ month将等于下一个参数。
function display($year = null, $month = null) {
$year = ($year == null) ? date('Y') : $year;
$month = ($month == null) ? date('n') : $month;
$conf = array(
'start_day' => 'Monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'mycal/display/'
);
$this->load->library('calendar', $conf);
echo $this->calendar->generate($year, $month);
}