Home > other >  ArgumentCountError Too few arguments to function App\Controllers\Blog::view()
ArgumentCountError Too few arguments to function App\Controllers\Blog::view()

Time:08-19

Sorry for my bad english but i have a problem when i try to open localhost:8080/blog this message show up

Too few arguments to function App\Controllers\Blog::view(), 0 passed in C:\xampp\htdocs\baru\vendor\codeigniter4\framework\system\CodeIgniter.php on line 896 and exactly 1 expected

so this is the controller:

 
use CodeIgniter\Controller;
use App\Models\ModelsBlog;
 
class Blog extends BaseController
{
    public function index()
    {$data = [
        'title' => 'artikel'
    ];
        $model = new ModelsBlog();
        if (!$this->validate([]))
        {
            $data['validation'] = $this->validator;
            $data['artikel'] = $model->getArtikel();
            return view('view_list',$data);
        }
    }

    public function form(){
        $data = [
            'title' => 'Edit Form'
        ];
        helper('form');
        return view('view_form', $data);
    }

    public function view($id){
        $data = [
            'title' => 'artikel'
        ];
        $model = new ModelsBlog();
        $data['artikel'] = $model->PilihBlog($id)->getRow();
        return view('view',$data);
    }

    public function simpan(){
        $model = new ModelsBlog();
        if ($this->request->getMethod() !== 'post') {
            return redirect()->to('blog');
        }
        $validation = $this->validate([
            'file_upload' => 'uploaded[file_upload]|mime_in[file_upload,image/jpg,image/jpeg,image/gif,image/png]|max_size[file_upload,4096]'
        ]);
 
        if ($validation == FALSE) {
        $data = array(
            'judul'  => $this->request->getPost('judul'),
            'isi' => $this->request->getPost('isi')
        );
        } else {
            $upload = $this->request->getFile('file_upload');
            $upload->move(WRITEPATH . '../public/assets/blog/images/');
        $data = array(
            'judul'  => $this->request->getPost('judul'),
            'isi' => $this->request->getPost('isi'),
            'gambar' => $upload->getName()
        );
        }
        $model->SimpanBlog($data);
        return redirect()->to('./blog')->with('berhasil', 'Data Berhasil di Simpan');
    }

    public function form_edit($id){
        $data = [
            'title' => 'edit artikel'
        ];
        $model = new ModelsBlog();
        helper('form');
        $data['artikel'] = $model->PilihBlog($id)->getRow();
        return view('form_edit',$data);
    }

    public function edit(){
        $model = new ModelsBlog();
        if ($this->request->getMethod() !== 'post') {
            return redirect()->to('blog');
        }
        $id = $this->request->getPost('id');
        $validation = $this->validate([
            'file_upload' => 'uploaded[file_upload]|mime_in[file_upload,image/jpg,image/jpeg,image/gif,image/png]|max_size[file_upload,4096]'
        ]);
 
        if ($validation == FALSE) {
        $data = array(
            'judul'  => $this->request->getPost('judul'),
            'isi' => $this->request->getPost('isi')
        );
        } else {
        $dt = $model->PilihBlog($id)->getRow();
        $gambar = $dt->gambar;
        $path = '../public/assets/blog/images/';
        @unlink($path.$gambar);
            $upload = $this->request->getFile('file_upload');
            $upload->move(WRITEPATH . '../public/assets/blog/images/');
        $data = array(
            'judul'  => $this->request->getPost('judul'),
            'isi' => $this->request->getPost('isi'),
            'gambar' => $upload->getName()
        );
        }
        $model->edit_data($id,$data);
        return redirect()->to('./blog')->with('berhasil', 'Data Berhasil di Ubah');
        
    }

    public function hapus($id){
        $model = new ModelsBlog();
        $dt = $model->PilihBlog($id)->getRow();
        $model->HapusBlog($id);
        $gambar = $dt->gambar;
        $path = '../public/assets/blog/images/';
        @unlink($path.$gambar);
        return redirect()->to('./blog')->with('berhasil', 'Data Berhasil di Hapus');
    }

}

ModelsBlog.php :

use CodeIgniter\Model;
 
class ModelsBlog extends Model
{
    protected $table = 'artikel';
     
    public function getArtikel()
    {
        return $this->findAll();  
    }
    public function SimpanBlog($data)
    {
        $query = $this->db->table($this->table)->insert($data);
        return $query;
    }
    public function PilihBlog($id)
    {
         $query = $this->getWhere(['id' => $id]);
         return $query;
    }
    public function edit_data($id,$data)
    {
        $query = $this->db->table($this->table)->update($data, array('id' => $id));
        return $query;
    }
    public function HapusBlog($id)
    {
        $query = $this->db->table($this->table)->delete(array('id' => $id));
        return $query;
    }
 }

And this is the view.php:

<body style="width: 70%; margin: 0 auto; padding-top: 30px;">
    <div >
        <div >
            <div >
                <h2><?php echo $artikel->judul; ?></h2>
            </div>
        </div>
    </div>
    <hr>
    <div >
        <div >
            <div >
                <?php
                        if (!empty($artikel->gambar)) {
                            echo '<img src="'.base_url("assets/blog/images/$artikel->gambar").'" width="30%">';
                        }
                ?>
                <?php echo $artikel->isi; ?>
            </div>
        </div>
    </div>
    
</body>

i cant find any solutions for this error, pls help thank you very much

CodePudding user response:

Let's go over what you're telling the code to do.

First, you make a call to /blog. If you have auto-routing turned on this will put you forward to the controller named 'Blog'.

class Blog extends BaseController

And since you do not extend the URL with anything, the 'index' method will be called.

public function index()
{$data = [
    'title' => 'artikel'
];
    $model = new ModelsBlog();
    if (!$this->validate([]))
    {
        $data['validation'] = $this->validator;
        $data['artikel'] = $model->getArtikel();
        return view('view_list',$data);
    }
}

The index method sets $data to an array filled with 'title' => 'artikel'. And then fills $model with a new ModelsBlog.

class ModelsBlog extends Model

There is no __construct method defined in ModelsBlog so just the class is loaded and specific execution related to $model stops there, which is fine.

Then, the index() from Blog goes on and checks whether or not $this->validate([]) returns false. Since there's no else statement, if $this->validate([]) were to return true, code execution would stop there. So we'll assume $this->validate([]) returns false. So far so good, there's nothing weird going on with your code.

However, IF $this->validate([]) returns false, you tell the index() to return the function called view(). Normally CodeIgniter would serve you the view you set as the first parameter. But since you also have a Blog method named 'view', CodeIgniter will try to reroute te request to that method. So in other words, the actual request you're trying to make is:

Blog::view()

And since you've stated that view() receives 1 mandatory parameter, the requests triggers an error. You can solve the problem by either renaming the view() method of Blog to something like 'show()' or 'read()'. Anything else that does not conflict with the native CodeIgniter view() function would be good.

Honestly though, you are sending through two parameters in the index() function call so I'm slightly confused why the error generated states you provided 0, but I hope at least you gain some insight from my answer and you manage to fix the problem.

If anyone could provide more information regarding this, feel free to comment underneath and I'll add your information to the answer (if it gets accepted).

  • Related