Welcome Guest, Not a member yet? Register   Sign In
Controller or its method is not found: \\App\\Controllers\\Home::index
#11

(03-06-2022, 11:31 PM)spreaderman Wrote: Controller or its method is not found: \App\Controllers\Api\V1::User

Because you use lower case first letter in the "v1" folder.

Quote:Folder names MUST start with an uppercase letter and ONLY the first character can be uppercase.
https://codeigniter4.github.io/userguide...irectories
Reply
#12

(This post was last modified: 03-07-2022, 06:51 PM by spreaderman. Edit Reason: adding clarity )

Thank you.  Why would one work and not the other though?

Also, still cannot get post to work.  I am not using postman.  Using the same code as before;

PHP Code:
    public function testmethod(){
 
helper(['curl']);
 
$rest_api_base_url 'https://development.example.com';
 
$get_endpoint '/api/v1/add';
 
$response $this->perform_http_request('POST'$rest_api_base_url $get_endpoint);
 
print_r($response); 
    

Route as follows;

PHP Code:
$routes->group("/api/v1", ["namespace" => 'App\Controllers\Api\V1'] , function($routes){
 
    $routes->group("user", function($routes){
    $routes->get("list""User_Controller::index");
    $routes->post("add""User_Controller::register");
 
    }
 );
}); 

register method as follows;


PHP Code:
namespace App\Controllers\Api\v1;
use 
CodeIgniter\RESTful\ResourceController;
use 
App\Models\UserModel;
use 
App\Entities\UserEntity;

    public function register(){
 
  $user = new UserEntity($this->request->getPost());
    //$user->startActivation();
    if ($this->UserModel->insert($user)){
        $this->sendActivationEmail($user);
            $response =[
            'status'    => 200,
            'message'  => 'User registed.  Check email to activate account.',
            'error'    => false,
            'data'      => []
            ];
    } else {
        $response =[
            'status'    => 500,
            'message'  => $this->UserModel->errors(),
            'error'    => true,
            'data'      => []
            ];
    }
    return $this->respondCreated($response);
    }
    public function index(){
        $response = [
            'status'    => 200,
            'message'  => 'Employee List',
            'error'    => false,
            'data'      => $this->UserModel->orderBy('id''DESC')->findAll(),
        ];
        return $this->respondCreated($response);    
    



https://development.example.com/api/v1/user/list - works!
https://development.example.com/api/v1/user/add - doesn't work from testmethod or postman.  It returns a blank screen and CI debugger bar.  Have tried with debugger bar off too and doesn't work as expected.


Any pointers appreciated.
Reply
#13

(This post was last modified: 03-07-2022, 07:05 PM by kenjis.)

(03-07-2022, 06:41 PM)spreaderman Wrote: Why would one work and not the other though?

Auto routes and Defined routes are different mechanism.

The rule "Folder names MUST start with an uppercase letter and ONLY the first character can be uppercase."
is a rule in auto routes.

If you define a route, it defines the exact controller name to run. The above uppercase rule does not applied.

Your controller is `\App\Controllers\Api\v1\User`. So it is not possible to reach by auto-routing.

I recommend you disable auto routes and define all routes in the Routes.php.
Because it is more secure for human beings.

In your Routes file:
PHP Code:
$routes->group("/api/v1", ["namespace" => 'App\Controllers\Api\V1'] , function($routes){ 

Your namespace should be  'App\Controllers\Api\v1'.

In your testmethod:
Code:
$get_endpoint = '/api/v1/add';

It should be '/app/v1/user/add'.
Reply
#14

Many thanks Kenjis!

The upper case, auto routing and namespace rules very well noted.

routes now as follows;

PHP Code:
$routes->group("/api/v1", ["namespace" => 'App\Controllers\Api\v1'] , function($routes){
        
$routes->group("user", function($routes){
            
$routes->get("list""User_controller::index");
            
$routes->post("add""User_controller::register");
        }
     );
}); 

I changed testmethod to:

Code:
public function testmethod(){
        helper(['curl']);
        $rest_api_base_url = 'https://development.example.com';
        $get_endpoint = '/api/v1/user/add';
        echo $rest_api_base_url.$get_endpoint;
        $payload = json_encode( array( "name"=> 'Richard' ) );
        $response = $this->perform_http_request('POST', $rest_api_base_url . $get_endpoint, $payload);
        print_r($response);
    }

https://development.example.com/Testing/testmethod - returns white page via BROWSER

https://development.example.com/api/v1/user/add - from POSTMAN it returns my top home page. I was expecting validation errors at least.

https://development.example.com/api/v1/user/add - from POSTMAN, it returns my top home page.

https://development.example.com/api/v1/user/add - from BROWSER it returns "404 - File Not Found Controller or its method is not found: \App\Controllers\Api\V1\User::add"

Sorry but really cannot see where I am going wrong. Any pointer appreciated.
Reply
#15

(This post was last modified: 03-07-2022, 08:54 PM by kenjis.)

Check your routes by running:
$ php spark routes

Quote:https://development.example.com/api/v1/user/add - from BROWSER it returns "404 - File Not Found Controller or its method is not found: \App\Controllers\Api\V1\User::add"

If it means, you navigated to https://development.example.com/api/v1/user/add from browser,
it sent GET request and you don't have the route. Therefore 404.
Reply
#16

Hi Kenjis,

I cannot see anything wrong.

+---------+---------------------------------------+--------------------------------------------------------------------------------------------+
| Method | Route | Handler |
+---------+---------------------------------------+--------------------------------------------------------------------------------------------+
| GET | signup | \App\Controllers\User_public\Signup\Signup_Controller:Confusedignup_create |
| GET | login | \App\Controllers\User_public\Login\Login_Controller::login_create |
| GET | logout | \App\Controllers\User_public\Login\Login_Controller::login_delete |
| GET | about | \App\Controllers\User_public\About\About_Controller::about_index |
| GET | / | \App\Controllers\User_public/Home\Home_Controller::home_index |
| GET | post | \App\Controllers\User_public\Post\Post_Controller::index |
| GET | admin/dashboard | \App\Controllers\Admin\Dashboard\Dashboard_Controller::dashboard_index |
| GET | admin/settings | \App\Controllers\Admin/App_Setting/App_Setting_Controller::app_setting_index |
| GET | admin/update_general_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_general_app_setting |
| GET | admin/update_contact_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_contact_app_setting |
| GET | admin/update_site_logo_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_site_logo_app_setting |
| GET | admin/update_site_favicon_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_site_favicon_app_setting |
| GET | admin/update_tracking_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_tracking_app_setting |
| GET | admin/update_email_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_email_app_setting |
| GET | admin/send_test_email | \App\Controllers\Admin\App_Setting\App_Setting_Controller:Confusedend_test_email |
| GET | admin/update_timezone_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_timezone_app_setting |
| GET | admin/users | \App\Controllers\Admin\User\User_Controller::user_index |
| GET | admin/posts | \App\Controllers\Admin\Post\Post_Controller::post_index |
| GET | admin/posts/create | \App\Controllers\Admin\Post\Post_Controller::post_create |
| GET | api/v1/user/list | \App\Controllers\Api\v1\User_controller::index |
| GET | api/v1/user/single/([0-9]+) | \App\Controllers\Api\v1\ApiController:ConfusedingleEmployee/$1 |
| GET | filemanager | \App\Controllers\Modules\Filemanager\Controllers\Filemanager::index |
| GET | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| HEAD | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| POST | signup | \App\Controllers\User_public\Signup\Signup_Controller:Confusedignup_create |
| POST | login | \App\Controllers\User_public\Login\Login_Controller::login_create |
| POST | password/processreset/([a-zA-Z0-9]+) | \App\Controllers\Password::processReset/$1 |
| POST | admin/update_general_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_general_app_setting |
| POST | admin/update_contact_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_contact_app_setting |
| POST | admin/update_site_logo_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_site_logo_app_setting |
| POST | admin/update_site_favicon_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_site_favicon_app_setting |
| POST | admin/update_tracking_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_tracking_app_setting |
| POST | admin/update_email_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_email_app_setting |
| POST | admin/send_test_email | \App\Controllers\Admin\App_Setting\App_Setting_Controller:Confusedend_test_email |
| POST | admin/update_timezone_app_setting | \App\Controllers\Admin\App_Setting\App_Setting_Controller::update_timezone_app_setting |
| POST | api/v1/user/add | \App\Controllers\Api\v1\User_controller::register |
| POST | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| PUT | api/v1/user/update/([0-9]+) | \App\Controllers\Api\v1\ApiController::updateEmployee/$1 |
| PUT | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| DELETE | api/v1/user/delete/([0-9]+) | \App\Controllers\Api\v1\ApiController::deleteEmployee/$1 |
| DELETE | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| OPTIONS | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| TRACE | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| CONNECT | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
| CLI | migrations/([^/]+)/([^/]+) | \CodeIgniter\Commands\MigrationsCommand::$1/$2 |
| CLI | migrations/([^/]+) | \CodeIgniter\Commands\MigrationsCommand::$1 |
| CLI | migrations | \CodeIgniter\Commands\MigrationsCommand::index |
| CLI | ci(.*) | \CodeIgniter\CLI\CommandRunner::index/$1 |
| CLI | admin/toggle_user_is_active/(.*) | \App\Controllers\Admin\User\User_Controller::toggle_user_is_active/$1 |
+---------+---------------------------------------+--------------------------------------------------------------------------------------------+
Reply
#17

(This post was last modified: 03-07-2022, 09:20 PM by kenjis.)

Code:
| GET    | api/v1/user/list                     | \App\Controllers\Api\v1\User_controller::index          |
| GET    | api/v1/user/single/([0-9]+)          | \App\Controllers\Api\v1\ApiController::?ingleEmployee/$1|
| POST   | api/v1/user/add                      | \App\Controllers\Api\v1\User_controller::register       |
| PUT    | api/v1/user/update/([0-9]+)          | \App\Controllers\Api\v1\ApiController::updateEmployee/$1|
| DELETE | api/v1/user/delete/([0-9]+)          | \App\Controllers\Api\v1\ApiController::deleteEmployee/$1|

It seems if you POST /api/v1/user/add, \App\Controllers\Api\v1\User_controller::register is executed.
What if you add `dd('OK');` in the first line of the register() method?
Reply
#18

(This post was last modified: 03-07-2022, 09:33 PM by spreaderman.)

(03-07-2022, 09:12 PM)kenjis Wrote:
Code:
| GET    | api/v1/user/list                     | \App\Controllers\Api\v1\User_controller::index          |
| GET    | api/v1/user/single/([0-9]+)          | \App\Controllers\Api\v1\ApiController::?ingleEmployee/$1|
| POST   | api/v1/user/add                      | \App\Controllers\Api\v1\User_controller::register       |
| PUT    | api/v1/user/update/([0-9]+)          | \App\Controllers\Api\v1\ApiController::updateEmployee/$1|
| DELETE | api/v1/user/delete/([0-9]+)          | \App\Controllers\Api\v1\ApiController::deleteEmployee/$1|

It seems if you POST /api/v1/user/add, \App\Controllers\Api\v1\User_controller::register is executed.
What if you add `dd('OK');` in the first line of the register() method?

Yes, indeed I tried that.  Here is a recap of the results;

https://development.example.com/api/v1/user/add - browser - 404 Controller or its method is not found: \App\Controllers\Api\V1\User::add
https://development.example.com/api/v1/user/add - postman - returns top page of website
https://development.example.com/Testing/testmethod - blank page

:-(

PHP Code:
public function register(){
 
        
dd('ok');
        
$user = new UserEntity($this->request->getPost());
        
//$user->startActivation();
        
if ($this->UserModel->insert($user)){
            
$this->sendActivationEmail($user);
            
$response =[
                
'status'    => 200,
                
'message'   => 'User registed.  Check email to activate account.',
                
'error'     => false,
                
'data'      => []
            ];
        } else {
            
$response =[
                
'status'    => 500,
                
'message'   => $this->UserModel->errors(),
                
'error'     => true,
                
'data'      => []
            ];
        }
        return 
$this->respondCreated($response);
    } 

I noticed in the APACHE access log the following;

2xx.2xx.2xx.3x - - [08/Mar/2022:04:29:42 +0000] "POST /api/v1/user/add HTTP/1.1" 303 1062 "-" "PostmanRuntime/7.29.0"


This is a 303 error?

The next line shows;

2xx.2xx.2xx.3x - - [08/Mar/2022:04:29:42 +0000] "GET / HTTP/1.1" 200 8239 "https://development.example.com/api/v1/user/add" "PostmanRuntime/7.29.0"

of course example is a not the domain though.
Reply
#19

(This post was last modified: 03-07-2022, 09:48 PM by kenjis.)

You don't see the `ok`. It means:
\App\Controllers\Api\v1\User_controller::register() is not executed.

The code that you pasted is the really the controller?

And what is the controller for top page of website?

POST /api/v1/user/add -> (redirected)
-> GET / -> Top page

Apache redirected the request?

Or Controller Filter redirected?
Reply
#20

I checked our the man page for php spark routes. I am missing the columns Before Filters | After Filters which would be helpful I think.

yes, thanks. dd('ok') should be producing an ok but it is not.

ok, I understand now that the request is being redirected. Thank you. How do you see in the access log where it is being redirected to?

How do I know if apache or CI redirected it?
Reply




Theme © iAndrew 2016 - Forum software by © MyBB