Codeigniter &

7 Cevap php

Bildiğiniz gibi CodeIgniter'daki, formun bir sayfa: /class/function/ID, sınıf işlevi denetleyicisi içinde yöntemidir ve kimlik bu yönteme geçmek parametre, denetleyici adıdır.

Tipik bir kullanım daha sonra uygun kitap için veritabanını sorgulamak istiyorum işlevine kitap id geçmek (örneğin bir kitap site için) olacaktır. Benim sorunum bu: Ben (normal nokta ve bu asla olmaz gezen tıklayın) veritabanında mevcut olmayan bir kimliği yazdığınız (url dize) ve çevresinde rastgele karıştırmasını ve ben nedeniyle artık sorgular veritabanı hataları olsun edildi Ben bir varolmayan kimliğini kullanarak gerçekleştirme girişimi.

Ben kimliği kullanmaya başlamadan önce herhangi bir iade satır olup olmadığını kontrol etmek için kod yazdım, ancak kimliği olmayan ise bu gibi görünüyor beri (yerine boş bir sayfa veya bir şey daha bir 404 hata sayfası almak için kullanıcı istiyorum uygun işlevselliği). Bu (sadece 404 sayfa gibi görünen bir görünüm yükleme değil) gerçek bir 404 sayfa olması çok gibi arama motorları ile vida değil gerekir. Normal program mantık akışı içinde (yukarıda açıklandığı gibi) nasıl CodeIgniter'ı kullanarak bir 404 hatası zorlayabilirsiniz: - Tamam, bu yüzden benim soru bu? Teşekkürler.

Update: Kod ateşleyici bir show_404('page') işlevi vardır ama bu gerçek bir HTTP 404 hata üretecektir sanmıyorum ...

7 Cevap

show_404() aslında bir 404 sayfa (o 404 durumunu gönderir) olarak kaydetmek için bir arama motoru için uygun başlıklarını gönderir.

Çağrılırken başlıklarını kontrol için bir Firefox addon kullanın aldı show_404(). Bunu doğru HTTP Durum Kodunu gönderir göreceksiniz.

Varsayılan kontrol application/errors/error_404.php. Ilk satırı:

<?php header("HTTP/1.1 404 Not Found"); ?>

Bu hat 404 olarak HTTP Durum ayarlar. Eğer bir 404 sayfa olarak sayfanızı okumak için arama motoru için gereken her şey.

Eğer özel bir hata sayfası istiyorsanız Kütüphaneler bir dosya adı MY_Exceptions and extend it with CI_Exceptions oluşturmak thing.In aşağıdakileri yapabilirsiniz. Ve sonra override the show_404() function. Bu işlev artık bir örneğini oluşturabilir kontrolör sınıfı kullanarak ve get_instance () function.And bu örneği kullanarak size özel 404 hata sayfası yükleyebilirsiniz.

class MY_Exceptions extends CI_Exceptions {

public function __construct(){
    parent::__construct();
}

function show_404($page = ''){ // error page logic

    header("HTTP/1.1 404 Not Found");
    $heading = "404 Page Not Found";
    $message = "The page you requested was not found ";
    $CI =& get_instance();
    $CI->load->view('/*Name of you custom 404 error page.*/');

}

Show_404 Evet () bir 404 göndermek ama cehennem gibi görünüyor OLACAKTIR. Orada burada önerilen birkaç kesmek olmuştur, ancak özellikleri inşa kullanmak varken neden hack var?

Upgrade to CI 2.0 ve şaşırtıcı kullanmak mümkün olacak:

$route['404_override'] = 'errors/error_404';

Sonra çok erken CI örneği düzgün çalışması için görünümleri, kütüphaneler ve yardımcıları yüklemeye WY çalışırken endişelenmenize gerek kalmadan genel hataları denetleyicisi olabilir.

Yalnızca bu adımları izler:

Step 1 Update your application/config/routes.php file

$route['404_override'] = 'error/error_404';

Step 2 Create your own controller in controllers folder ex. error.php

<?php
class Error extends CI_Controller
{
function error_404()
{
    $data["heading"] = "404 Page Not Found";
    $data["message"] = "The page you requested was not found ";
        $this->load->view('error',$data);
}
}
?>

Step 3 Create your view in views folder ex. error.php

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title><?php echo $heading;?></title>
</head>

<body>
<?php echo $message;?>
</body>
</html>
        $this->output->set_status_header('404');

404 başlıkları üretir.

Application / controllers klasörü denetleyicisi oluşturun.

class Error extends Controller
{
function error_404()
{
	$this->load->view('error');
}
}

Sonra uygulama / kütüphane, application / libraries / MY_Router.php oluşturarak Router sınıfını genişletmek

class MY_Router extends CI_Router
{
private $error_controller = 'error';
private $error_method_404 = 'error_404';

function MY_Router()
{
	parent::CI_Router();
}

// this is just the same method as in Router.php, with show_404() replaced by $this->error_404();
function _validate_request($segments)
{
	// Does the requested controller exist in the root folder?
	if(file_exists(APPPATH.'controllers/'.$segments[0].EXT))
	{
		return $segments;
	}

	// Is the controller in a sub-folder?
	if(is_dir(APPPATH.'controllers/'.$segments[0]))
	{
		// Set the directory and remove it from the segment array
		$this->set_directory($segments[0]);
		$segments = array_slice($segments, 1);
		if(count($segments) > 0)
		{
			// Does the requested controller exist in the sub-folder?
			if(!file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT))
			{
				return $this->error_404();
			}
		}
		else
		{
			$this->set_class($this->default_controller);
			$this->set_method('index');
			// Does the default controller exist in the sub-folder?
			if(!file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
			{
				$this->directory = '';
				return array();
			}
		}
		return $segments;
	}
	// Can't find the requested controller...
	return $this->error_404();
}

function error_404()
{
	$segments = array();
	$segments[] = $this->error_controller;
	$segments[] = $this->error_method_404;
	return $segments;
}

function fetch_class()
{
	// if method doesn't exist in class, change
	// class to error and method to error_404
	$this->check_method();
	return $this->class;
}

function check_method()
{
	$class = $this->class;
	if (class_exists($class))
	{
		if ($class == 'doc')
		{
			return;
		}
		if (! in_array('_remap', array_map('strtolower', get_class_methods($class)))
			&& ! in_array(strtolower($this->method), array_map('strtolower', get_class_methods($class))))
		{
			$this->class = $this->error_controller;
			$this->method = $this->error_method_404;
			include(APPPATH.'controllers/'.$this->fetch_directory().$this->error_controller.EXT);
		}
	}
}

}

Sayfa yoksa, bu denetleyici hata yönlendirilir

Bu kullanmayı deneyin

set_status_header(404);