2016-08-27 8 views
1

Ich lerne gerade Codezeichner, aber ich habe ein bisschen ein Problem mit dem Routing. Meine Routen Datei ist wie folgt:CodeIgniter Parameter in der Mitte der Route

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

$route['images/(:num)/upload/'] = 'image/upload/$1'; 
$route['images/(:num)'] = 'image/index/$1'; 

$route['yoyo/(:num)'] = 'yoyo/view/$1'; 

$route['default_controller'] = 'yoyo'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 

Mein Problem ist mit der ersten Route; Ich kann es nicht zum Laufen bringen, ohne mich (: num) zum Ende der Route zu bewegen. Basierend auf anderen Routen, die ich nach dem Durchsuchen von stackoverflow gesehen habe, habe ich den Eindruck, dass dies funktionieren sollte. Irgendwelche Ideen?

Also einfach klar zu sein, es funktioniert, wenn ich die Folge Route hinzufügen:

$route['images/upload/(:num)/'] = 'image/upload/$1'; 
+0

Sie sollten reservierte Routen an höheren Orten behalten. Überprüfen Sie das letzte Zitat aus [docs] (https://codeigniter.com/userguide3/general/routing.html#reserved-routes) (rot markiert): "Die reservierten Routen müssen vor beliebigen Platzhalter- oder regulären Ausdrucksrouten stehen." . – Tpojka

+0

Guter Punkt. Hatte das nicht entdeckt; Ich werde es mir merken. –

Antwort

0
$route['images/(:num)/upload/'] = 'image/$1/upload'; 

bearbeiten: Was war ich thinking..sorry.

Natürlich können Sie nicht den Code, den ich Ihnen gesagt habe, weil die Route images/$1/upload bedeutet, dass Sie auf den Controller images ... zugreifen und die Funktion $1.

Offensichtlich können Sie das nicht tun. Dies ist, was Sie tun sollten:

$route['images/upload/(:num)'] = 'image/upload/$1'; 


public class image extends CI_Controller 
{ 
    public function upload($arg0) {} 
} 

Und dann, wenn Sie mehr args übergeben möchten, müssen Sie nur die Route Weg weiter zu gehen.

$route['images/upload/(:num)/(:any)'] = 'image/upload/$1/$2'; 

public function upload($arg0, $arg1) {} 
+0

Ich habe es versucht: $ route ['images/(: num)/upload /'] = 'image/$ 1/upload'; und leider bekomme ich immer noch eine 404. –

+0

@KimWard siehe meine Bearbeitung. – Linesofcode

+0

Richtig, das ist der Zustand, in dem ich gearbeitet habe. Ich hatte nur gehofft, dass ich den Parameter in der Mitte der Route haben könnte, aufgrund eines Hacky-Codes, den ich in meinem Konstruktor bekommen habe, indem ich Segment 2 der URL überprüft habe. –