Codeigniter нысанын растау: Егер қандай да бір тексеру қатесі табылса, алдыңғы бетке қалай бағыттауға болады?

Мен нысанды тексеру үшін Codeigniter сыныбының сыныбын қолданамын. Тексеру қатесі табылған болса, контроллерден алдыңғы бетке қалай бағыттау керектігін айтқыңыз келе ме?

Менің контроллерімде:

if ($this->form_validation->run() == FALSE){

  //**** Here is where I need to redirect  

} else  {
    //code to send data to model...           

  }                             
6

4 жауаптар

Бұл үшін URL-көмекшісін кеңейтіп алдым.

https://github.com/jonathanazulay/CodeIgniter-extensions/blob/master/MY_url_helper.php

Сіздің контроллеріңізде:

$this->load->helper('url');
redirect_back();

Тек MY_url_helper.php сөзін application/helpers ішіне қойып, баруға дайынсыз.

11
қосылды
тамаша шешім.
қосылды автор Fahid Mohammad, көзі
@AlexSpencer рахмет! Бұл жерде http-дің 17-жолда (үлкен проблема емес, бірақ әлі де) қатаң кодталғаны туралы ескерту қою керек. Бұл анықталуы керек, бұл сұраулар үшін ашық.
қосылды автор Jonathan Azulay, көзі
Кішкене кері байланыс: бұл URL мекенжайы мен үшін керемет жұмыс істеді. Көп рақмет. Менің ойымша, мұндай көмекке көмектесу керек.
қосылды автор Alex Spencer, көзі

ЖАҢАРТУ

Сіз пішінді жіберіп, оны тексеріп, тексеруді сәтсіз аяқтаған жағдайда тексеру пішімін қайтадан көрсетіңіз немесе тексеру жарамды болса, мүлде басқаша көрсетіңіз.

Мұны жасаудың ең жақсы жолы - өз бетінше өз бетінше жазу. Пішінің әрекеті action = «» болады. Осылайша, әдісіңізде пішіннің жіберілгенін тексеріп, онда не істеу керектігін анықтай аласыз:

// in my form method
if ($this->input->post('submit'))//make sure your submit button has a value of submit
{
    //the form was submitted, so validate it
     if ($this->form_validation->run() == FALSE)
     {
         $this->load->view('myform');
 }
 else
 {
         $this->load->view('formsuccess');
 }
}
else
{
   //the form wasn't submitted, so we need to see the form
    $this->load->view('myform');
}

ҚАЛДЫҚ ЖАУАП

Сіз әрқашан қолданыстағы URI-ті пішіндегі жасырын өрісте жібере аласыз:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" />

Содан кейін тексеруді сәтсіз аяқтауға бағыттау:

redirect($this->input->post('redirect'));

Немесе flashdata сеансының айнымалы мәнінде қайта бағыттаудың URL мекенжайын орнатуға болады:

// in the method that displays the form
$this->session->set_flashdata('redirect', $this->uri->uri_string());

Содан кейін тексеруді сәтсіз аяқтауға бағыттау:

redirect($this->session->flashdata('redirect'));
5
қосылды
Жауабыңызға рахмет. Сіз енгізген кодтардың алғашқы екеуі тексеру қателерін көрсету үшін өте жақсы жұмыс істейді. Сондықтан, мен сізде орналастырған кодтардың екіншісін пайдалануға тырыстым, бірақ PHP/codeigniter туралы өте аз білетінмін, мен оларды қайда пайдалануға болатындығына сенімді емеспін. Осы «$ this-> session-> set_flashdata ('redirect', $ this-> uri-> uri_string ()));» Жоғарыда немесе менің айтқан түрінде жіберген контролерімде. Қайтадан рахмет :) Менің ақымақ сұрағым үшін кешірім сұраймын. :(
қосылды автор black_belt, көзі
Қалай болғанда да, егер сіз де соларды тапсырмасаңыз, тексеру қателерін аласыз. Мен сізге жауапты жаңартамын, сізде валидация қателері көрсетілген.
қосылды автор swatkins, көзі

Әдетте, сіз осылай жасай аласыз (қазіргі уақытта псевдокод):

  • if form_validation == false --> the form is either not submitted yet or validation failed --> load the form view;
  • if form_validation == true --> do the processing.

Бұл бір контроллерде қалуыңыз керек дегенді білдіреді. Сіздің кодыңыз осы әрекетті өзіңіз жасаған болуы керек.

Егер сіз қайта бағыттауды қаламасаңыз, тиісті функцияны шақырыңыз:

redirect('updatebatch/get/40','refresh');
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder
0
қосылды
Жауабыңызға рахмет. Кешіріңіз, мен бұл туралы бұрын айтқан болар едім - localhost/sundial/updatebatch/get/40 - 40-ның бөлігі айнымалы болып табылады. Уақытты өзгертуі мүмкін. Бұл жағдайда не істеуім керек? Тек түсінікті болу үшін, мұнда 40 - кестенің белгілі бір санының id нөмірі. Мен деректерді алу үшін id пайдаланамын. Сіздің көмегіңіз үшін көп рахмет :)
қосылды автор black_belt, көзі

Мен қажет болған кезде қайта бағыттауды жасау үшін кітапхана ішіндегі функцияны жасадым.

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

class Functions {

public function generateRedirectURL()
{
$CI =& get_instance();
$preURL = parse_url($_SERVER['REQUEST_URI']);
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']);
$CI->session->set_userdata($redirectUrl);
}

}

//End of the file

және сол бетке қайта бағыттауды жасағыңыз келгенде, функцияға жазыңыз:

$this->load->library('functions'); //you can put it in the autoloader config
$this->functions->generateRedirectURL();

Сонда ғана сізге қоңырау шалу керек:

redirect($this->session->userdata['redirectUrl']);
0
қосылды