2013-06-02 4 views
2

Я ОЧЕНЬ новичок в CodeIgniter, и мне не удается вызвать функцию из моего класса по умолчанию.Невозможно вызвать функцию класса из URL

Контроллер

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Main extends CI_Controller 
{ 

public function index() 
    { 
    $this->welcome(); 
    } 

public function welcome() 
    { 
    $this->load->view('view_welcome');  
    } 
} 

файл .htaccess

<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase /pickme/ 

RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond %{REQUEST_URI} ^application.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

# Without mod_rewrite, route 404's to the front controller 
ErrorDocument 404 /index.php 

В настоящий момент он вызывает этот главный контроллер по умолчанию, как и следовало ожидать.

например

localhost/sitename 
AND 
localhost/sitename/index.php 
AND 
localhost/sitename/index.php/main/index 
(All have the same result) 

Так я был под впечатлением, что

localhost/sitename/class/function/id 

бы, как Htaccess будет работать, но им получаю ошибку 404, когда я пытаюсь и доступ

localhost/sitename/main/welcome 
+0

У вас есть попробовал http://www.farinspace.com/codeigniter-htaccess-file/ – tomexsans

ответ

1

Попробуйте использовать правило перезаписи, предложенное в руководстве пользователя.

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Я не эксперт с модулем перезаписи apace, но ваша определенно выглядит неправильно. Вы не хотите, чтобы ваши приложения и системные папки были доступны из браузера. Лучшей практикой является на самом деле сохранить ее вне вашей корневой папки в Интернете.

Кроме того, я не вижу причин для вызова метода приветствия из метода индекса, instrad просто сохранения логики в контроллере индекса.

Но ваша идея:

hostname/folder/class/function/parameters 

Это очень верно :)

И последнее, но не менее, вы, вероятно, забыл оставить индексный файл в config.php заготовкой, что вам нужно сделать, если вы хотите удалить index.php.

удачи (:

EDIT:

Попробуйте использовать это в вашем файле Htaccess:.

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond $1 !^(index\.php|images|robots\.txt|css) 
RewriteRule ^(.*)$ ./index.php/$1 [L] 
</IfModule> 

И в вашем config.php не забудьте добавить слэш

С этим он работает здесь.

+0

Спасибо за ответ Йенс. Весь материал .htaccess был получен из учебника phpacademy, в котором я читал: http://www.youtube.com/watch?v = KMg-pqwaGaE Я знаю, что на данный момент нет причин для вызова функции welcome(), но если бы я сделал доступ к localhost/sitename/main/welcome, я бы ожидал получить тот же результат, что и localhost/sitename (который я не получаю) –

+0

Вы действительно попробовали с предоставленным htaccess и удалили ли вы index.php из файла config.php? – jah

+0

Я получаю тот же результат. localhost/sitename/works, но localhost/sitename/main и localhost/sitename/main/welcome НЕ ДОПУСКАЕТ –

Смежные вопросы